
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クエリのキャンセルがいつにな...
-
SI Object Browserのテーブルス...
-
VIEWしか読み取れないユーザの...
-
エクセルでテーブルの最終行が...
-
レプリケーションしているテー...
-
ADOでSeekメッソッドが使えませ...
-
accessテーブル作成クエリを実...
-
ユニオンクエリの結果をテーブ...
-
Accessにインポートしたら並び...
-
「マスタ」と「テーブル」の違...
-
ACCESS2007 フォーム 「バリア...
-
3つ以上のテーブルをUNIONする...
-
Access VBA [リモートサーバー...
-
同じ構成のテーブルを結合する
-
オラクルではできるのにSQLSERV...
-
ACCESS VBA コマンドDoCmd.Open...
-
DataTableから条件を満たした行...
-
accessのエクスポートエラーに...
-
SELECT時の行ロックの必要性に...
-
SELECT時にカウントアップ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SI Object Browserのテーブルス...
-
クエリのキャンセルがいつにな...
-
accessテーブル作成クエリを実...
-
ユニオンクエリの結果をテーブ...
-
あるテーブルのデータを追加、...
-
ストアドをまたがるローカル一...
-
SQLサーバーのテーブルの値...
-
PL/SQLでFROM句に変数を使いたい
-
UNIONなどで複数のテーブルから...
-
エクセルでテーブルの最終行が...
-
アクセスのテーブル作成クエリ...
-
重複するレコードに対しフラグ...
-
VIEWしか読み取れないユーザの...
-
コンボボックスで入力したもの...
-
AccessVBAで降順にするテーブル...
-
ボタンをクリックした回数をカ...
-
Accessでバージョン違いのファ...
-
テーブル作成クエリで新テーブ...
-
トリガの使い方
-
レプリケーションしているテー...
おすすめ情報