![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
1店舗1テーブルのデータベースにしております。
全店の在庫を検索した時に、まとめてSELECTすると重いため、
TOP100などで、1~100,100~200などと分けたいです。
単テーブルでの分け方は何とか分かっていますが、
複数のテーブルをUNIONで結合した場合の分け方が分りません。
■ 現状:全店の在庫を各店のテーブルより、取得しています。
SELECT dbo.A店TB.ID, dbo.A店TB.BRAND, dbo.A店TB.CODE, dbo.A店TB.STOCK, dbo.A店TB.STORE FROM dbo.A店TB"
+ " where dbo.A店TB.CODE like '%" + txbCode.Text + "%' AND"
+ " dbo.A店TB.BRAND like '%" + txbBrand.Text + "%' AND"
+ " dbo.A店TB.STOCK > 0"
+ " UNION "
+ "SELECT dbo.B店TB.ID, dbo.B店TB.BRAND, dbo.B店TB.CODE, dbo.B店TB.STOCK, dbo.B店TB.STORE FROM dbo.B店TB"
+ " where dbo.B店TB.CODE like '%" + txbCode.Text + "%' AND"
+ " dbo.B店TB.BRAND like '%" + txbBrand.Text + "%' AND"
+ " dbo.B店TB.STOCK > 0"
+ " UNION "
+ "SELECT dbo.C店TB.ID, dbo.C店TB.BRAND, dbo.C店TB.CODE, dbo.C店TB.STOCK, dbo.C店TB.STORE FROM dbo.C店TB"
+ " where dbo.C店TB.CODE like '%" + txbCode.Text + "%' AND"
+ " dbo.C店TB.BRAND like '%" + txbBrand.Text + "%' AND"
+ " dbo.C店TB.STOCK > 0"
■ 問題:1店舗、1万レコード(件)のデータがあり、実際には10店舗ほどからデータを取ってくるため、読み込みに時間がかかってしまいます。
■ やりたいこと:最初の100件だけをSQLのSELECTで取得するクエリを書きたいです。別のプログラムで以下のように書きましたが、
これを上記のUNIONを使ったクエリでもやりたいと考えています。具体的なコードが思いつきません。お願いします。
SELECT TOP 100 BlogTB.TITLE,BlogTB.TEXT "
+ "FROM BlogTB WHERE ID NOT IN(SELECT TOP 200 ID FROM BlogTB ORDER BY ID DESC) ORDER BY ID DESC"
No.1ベストアンサー
- 回答日時:
UNION文全体を括って、TOP100を切ればいいでしょう。
SELECT TOP 100 *
FROM
(SELECT dbo.A店TB.ID, ・・(略)FROM dbo.A店TB
WHERE (略)
UNION
SELECT dbo.C店TB.ID, ・・(略)FROM dbo.C店TB
WHERE (略)
UNION
SELECT dbo.C店TB.ID, ・・(略)FROM dbo.C店TB
WHERE (略)
) tmp
ORDER BY ...
通常SQL Serverでこのように書くと、それぞれのベーステーブルに対して最大でTOP 100がかかるようにプランされるはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- ドライブ・ストレージ NASの容量と ホルダーの プロパティの サイズと ディスク上のサイズの違い 1 2022/10/03 13:41
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- クラシック 楽器の省略記号について、 2 2023/03/30 18:29
- 数学 平面ベクトル 3 2022/08/02 20:29
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PL/SQLでFROM句に変数を使いたい
-
クエリのキャンセルがいつにな...
-
エクセルでテーブルの最終行が...
-
ADOでSeekメッソッドが使えませ...
-
accessテーブル作成クエリを実...
-
コンボボックスで入力したもの...
-
ユニオンクエリの結果をテーブ...
-
SI Object Browserのテーブルス...
-
位置を指定してフィールドを追...
-
Accessにインポートしたら並び...
-
「マスタ」と「テーブル」の違...
-
MAX値を条件にデータを取得する...
-
AccessのSQLで、FROM句の構文エ...
-
Accessでの自己結合?
-
Access 削除クエリが重い
-
アクセス2007 ルックアップに...
-
accessでのリンクテーブルの更新
-
Access VBA Me.Requery レコー...
-
SQL 件数取得を速くしたい
-
Accessでのレコードの削除時の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでテーブルの最終行が...
-
エクセルでCtrl+Tでテーブルの...
-
accessテーブル作成クエリを実...
-
クエリのキャンセルがいつにな...
-
ユニオンクエリの結果をテーブ...
-
コンボボックスで入力したもの...
-
SI Object Browserのテーブルス...
-
SQLスクリプトを自動生成する方法
-
あるテーブルのデータを追加、...
-
VIEWしか読み取れないユーザの...
-
UNIONなどで複数のテーブルから...
-
AccessVBAで降順にするテーブル...
-
テーブル作成クエリで新テーブ...
-
Access のリレーションシップで...
-
ADOでSeekメッソッドが使えませ...
-
アクセスのテーブル作成クエリ...
-
エクセルの数式で添付写真のも...
-
レプリケーションしているテー...
-
AccessでOracleのテーブルをリ...
-
ストアドをまたがるローカル一...
おすすめ情報