プロが教えるわが家の防犯対策術!

select文についてお教えください。環境はAccess2003,Win XPで動かしています。

TABLE
ID(INT),STOCK(INT)
001,100
001,200
001,
002,200
002,300
002,400
003,100

上記のようなテーブル、データがあります。

■抽出したい行
001,100
001,200

■抽出条件
STOCKに空がはいっている。
STOCKに空がはいっている行は選択しない。
STOCKに空がはいっているIDで、同一IDでSTOCKにデータがある行を抜き出したいです。

どのようにSQLを組み立てればよいかわかりません。
宜しくお願い致します。

A 回答 (3件)

ANo.2さんの方法で可能だと思いますが、クリエ一つでやりたい場合は、



テーブルからクエリを作成して、STOCK の抽出条件に下記の式を記述

In (SELECT ID FROM TABLE WHERE STOCK Is Null) AND Is Not Null

SQLだと、

SELECT ID, STOCK FROM TABLE WHERE ID In (SELECT ID FROM TABLE WHERE STOCK Is Null) And STOK Is Not Null;

これは、ANo.1さんのSQL の = を In に変更しただけです(複数の結果を返すサブクエリに = は使えない)。


他にも、

SELECT ID, STOCK FROM TABLE INNER JOIN (SELECT DISTINCT ID FROM TABLE WHERE STOCK Is Null) WHERE STOK Is Not Null;

とか、いろいろあります。
    • good
    • 0
この回答へのお礼

凄いです!問題なくできました!ありがとうございます!感謝感謝です!

お礼日時:2012/08/29 23:43

本格的に取り組むならAccess SQLの解説本で学習。

SQL言語はメーカー製品による方言があるため他の製品とは書き方を変えなくてはならないことがあり得ます。

手っ取り早く済ませるには、Accessのクエリウィザードを利用すること。
ウィザードではテーブルまたはクエリ結果テーブルとフィールドとをビジュアルに指定して、一致、差分をSQLの知識なしでも抽出するクエリが簡単に作成できます。できればAccessの解説サイトなどでクエリウィザードの使い方を学習しておくのが望ましいです。

ウィザードだと、まず当該テーブルのSTOCKフィールドの値がNULLのIDフィールドを抽出するクエリを作成。(クエリ1)
次に、ウィザードで当該テーブルのSTOCKフィールドの値がNULLでないレコードを抽出するクエリを作成。(クエリ2)
最後にウィザードで、クエリ1とクエリ2のクエリ結果テーブルを突き合わせてIDフィールドの値が一致するレコードを抽出するクエリを作成。(クエリ3)。
クエリ3を実行することで、期待した結果は得られるでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!確かにクエリを複数やればできますね!私は一発でやりたかったので、No1さん、No3さんのを参考にさせていただきました!ご回答ほんとうにありがとうございます!

お礼日時:2012/08/29 23:44

select table.id, table.stock from [table] where id = (select table.id from [table] where table.stock is null) and table.stok is not null



とかかな。
    • good
    • 0
この回答へのお礼

凄いです!問題なくできました!ありがとうございます!感謝感謝です!

お礼日時:2012/08/29 23:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!