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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
GROUP BYを行った後に結合したい。
Oracle
-
2つのテーブルを結合して最大値を取得したい
SQL Server
-
オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
SQL Server
-
-
4
SQLServerのselect文でデータ数1万くらいのDBから
SQL Server
-
5
SQL Left Join で重複を排除するには
SQL Server
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
8
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
9
SQL文で複数の項目のうちひとつの項目のみの重複を排除する方法を教えてください。
MySQL
-
10
SELECT 文 GROUP での1件目を取得
SQL Server
-
11
テーブル名を[]でくくらないとエラーになってしまう
SQL Server
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessテーブル作成クエリを実...
-
エクセルでテーブルの最終行が...
-
クエリのキャンセルがいつにな...
-
Accessにインポートした複数の...
-
テーブル作成クエリで新テーブ...
-
SQLスクリプトを自動生成する方法
-
レプリケーションしているテー...
-
SQL Serverのテーブル追加を、A...
-
SQLサーバーのテーブルの値...
-
SI Object Browserのテーブルス...
-
位置を指定してフィールドを追...
-
Access のリレーションシップで...
-
列サイズ変更時、DB停止は必要?
-
「マスタ」と「テーブル」の違...
-
ACCESSのSQLで、NULLかNULLでな...
-
SELECT時の行ロックの必要性に...
-
sqlserverで集計結果をUPDATEし...
-
2つの項目が重複するレコード...
-
数百万件レコードのdelete
-
ACCESS2007 フォーム 「バリア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessテーブル作成クエリを実...
-
クエリのキャンセルがいつにな...
-
SI Object Browserのテーブルス...
-
エクセルでテーブルの最終行が...
-
UNIONなどで複数のテーブルから...
-
Accessにインポートした複数の...
-
ストアドをまたがるローカル一...
-
SQLについて質問です。 テーブ...
-
ユニオンクエリの結果をテーブ...
-
あるテーブルのデータを追加、...
-
SQLサーバーのテーブルの値...
-
位置を指定してフィールドを追...
-
レプリケーションしているテー...
-
コンボボックスで入力したもの...
-
AccessVBAで降順にするテーブル...
-
重複するレコードに対しフラグ...
-
列サイズ変更時、DB停止は必要?
-
SQLスクリプトを自動生成する方法
-
Access のリレーションシップで...
-
VIEWしか読み取れないユーザの...
おすすめ情報