UNIONなどで複数のテーブルから上位10件などSELECTする方法
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"
補足
すいませんでした。 意味は 1 です。 日ごとにレコードがあり、初めのレコードほど古く、最後尾がもっとも最新な情報となります。ややこしくて申し訳ないのですが、dayには日付が格納されているのではなく、auto_incrementでつけた数字が入っています。日付は hoge に 2005/3/20 な感じで入っています。つまり、 2005/1/4 にちの日に登録されたレコードをすべて取得した後、その一つ前1レコードと一つ後1レコードのみを取得したいと思っています。つまり、1/4以降と以前に登録された日を割り出すため、このようにややこしくなってしまいました。 よろしくお願いします。