- 締切済み
SQLについて教えてください。
SQLについて質問があります。 あるテーブルの項目が、倉庫名、商品名、在庫数量とあった場合、 違う倉庫にある同一商品が数件あったとします。 例えば、 A倉庫 商品●● 10個 B倉庫 商品●● 20個 C倉庫 商品●● 5個 A倉庫 商品×× 3個 B倉庫 商品×× 15個 C倉庫 商品×× 0個 上記のような場合、●●商品についてはどれも在庫が1個以上 あるので通常に3件取得したいのですが、××商品はC倉庫が在庫0個です。 上記の様に0個の件数が1件でもあったら、その商品については 取得しない様なSQL式を1発で組むことは可能でしょうか? (上記の例の場合、●●商品3件のみ取得したい) 何故、SQL初心者で初歩的な質問で申し訳ありませんが よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nora1962
- ベストアンサー率60% (431/717)
(1)数量がゼロのデータが少なく、数量でNULL値を持つものがない。 (2)商品に索引が作成されている。 状況なら。 create table zaiko ( souko char(1), shohin nvarchar(1), suryo int ) create index idx_shohin on zaiko (shohin) insert into zaiko values ( 'A', '●', 10 ); insert into zaiko values ( 'B', '●', 20 ); insert into zaiko values ( 'C', '●', 5 ); insert into zaiko values ( 'A', '×', 3 ); insert into zaiko values ( 'B', '×', 15 ); insert into zaiko values ( 'C', '×', 0 ); select * FROM ZAIKO where zaiko.shohin not in ( select shohin from zaiko where suryo = 0 ) という書き方が有効かも知れません。
- root139
- ベストアンサー率60% (488/809)
下記の様な書き方も出来ますね。(テーブル名は仮に「在庫」としました) SELECT * FROM 在庫 a WHERE NOT EXISTS ( SELECT * FROM 在庫 b WHERE a.商品名 = b.商品名 AND b.在庫数量 = 0 ) WHERE 句は「商品名が同じで在庫数量が0のデータが存在しない」という条件を表現しています。
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 まぁ書き方はいろいろあるかと思いますが・・・、 SELECT 倉庫名, 商品名, 在庫数量 FROM テーブル A WHERE EXISTS (SELECT 商品名, SUM(1) AS FLAG_A, SUM(CASE WHEN 在庫数量 = 0 THEN 0 ELSE 1 END) AS FLAG_B FROM テーブル B WHERE A.商品名 = B.商品名 GROUP BY 商品名 HAVING FLAG_A = FLAG_B) とか・・・。
お礼
回答ありがとうございました。 また、お礼が遅くなり申し訳ありません。 早速試してみます。 ありがとうございました。
お礼
ありがとうございました。 記述も色々ありますね。 勉強になります。