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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
2つのテーブルを結合して最大値を取得したい
SQL Server
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
SQL Server
-
-
4
含まない言い方ってどうしたらいいんでしょうか
日本語
-
5
GROUP BYを行った後に結合したい。
Oracle
-
6
T-SQLで任意の箇所で強制終了する方法
SQL Server
-
7
ユーザー定義関数内でのsp_executesqlプロシージャの使用
SQL Server
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クエリのキャンセルがいつにな...
-
位置を指定してフィールドを追...
-
レプリケーションしているテー...
-
コンボボックスで入力したもの...
-
SI Object Browserのテーブルス...
-
列サイズ変更時、DB停止は必要?
-
AccessVBAで降順にするテーブル...
-
AccessでOracleのテーブルをリ...
-
SQL文のテーブルについて
-
ボタンをクリックした回数をカ...
-
「マスタ」と「テーブル」の違...
-
Accessにインポートしたら並び...
-
ACCESS2007 フォーム 「バリア...
-
ACCESSのSQLで、NULLかNULLでな...
-
SELECT文でのデッドロックに対...
-
SELECT文でタイムアウト...
-
ビューで引数を使いたい
-
デッドロックが発生します。
-
Accessユニオンクエリーで2つ...
-
Access VBA Me.Requery レコー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでテーブルの最終行が...
-
エクセルでCtrl+Tでテーブルの...
-
accessテーブル作成クエリを実...
-
クエリのキャンセルがいつにな...
-
ユニオンクエリの結果をテーブ...
-
コンボボックスで入力したもの...
-
SI Object Browserのテーブルス...
-
SQLスクリプトを自動生成する方法
-
あるテーブルのデータを追加、...
-
VIEWしか読み取れないユーザの...
-
UNIONなどで複数のテーブルから...
-
AccessVBAで降順にするテーブル...
-
テーブル作成クエリで新テーブ...
-
Access のリレーションシップで...
-
ADOでSeekメッソッドが使えませ...
-
エクセルの数式で添付写真のも...
-
アクセスのテーブル作成クエリ...
-
レプリケーションしているテー...
-
AccessでOracleのテーブルをリ...
-
ストアドをまたがるローカル一...
おすすめ情報