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

すみません。大変困っています。

SQL文で
Aテーブル、Bテーブルがありまして、
A.id = B.idがリレーションしています。

Aテーブルから、Bテーブルのidが無いデータだけを
取り出したいのですが、どういった例が考えられますでしょうか?よろしくお願いします。

A 回答 (3件)

サブクエリーを使った例のほかに JOIN 構文を使った方法もあります。



SELECT A.* FROM A LEFT JOIN B ON A.id = B.id WHERE B.id IS NULL;

JOIN は通常、両方のテーブルのキーを使って2つのテーブルを結合する構文で、両方にキーが存在しないと結合されませんが、LEFT をつけると左側(この場合A)のテーブルをすべて含む結合(右側にキーが存在しない場合は NULL として扱われる)が行われます。

http://dev.mysql.com/doc/mysql/ja/JOIN.html#IDX1 …
の上から3つ目あたりに例が載っています。

参考URL:http://dev.mysql.com/doc/mysql/ja/JOIN.html#IDX1 …
    • good
    • 0

私は普段 PostgreSQL を使っているので MySQL のリファレンスを見ながら回答していますが・・・


MySQL でサブクエリーが使えないってことはないでしょう(汗)

> 動きません。
> MySQLでは、サブクエリーだめなんですかね…。。

なんというエラーが出ているのか、教えて欲しいですね。

SELECT * FROM A WHERE id <> ANY (SELECT id FROM B);
とかではどうでしょう?

サブクエリーを使った例は
http://dev.mysql.com/doc/mysql/ja/ANY_IN_SOME_su …
などを参考にしてください。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

>SELECT * FROM A WHERE id <> ANY (SELECT id FROM B);
↑こちらを試すために↓SQLを実行したところ

SELECT * FROM A WHERE id <> ANY(SELECT id FROM B
WHERE date BETWEEN '2004-08-01' AND '2004-09-01')

次のエラーが出ます。
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax

*表題の件の問題は、SQLを二回に分けて、NOT IN で実行し解決しました。
ありがとうございます。

お礼日時:2004/08/18 16:28

MySQLはあまりよく知らないですが、


サブクエリーが使えれば次のSQL文で取り出せます。

SELECT A.* FROM A WHERE A.ID NOT IN (SELECT B.ID FROM B)

この回答への補足

動きません。

MySQLでは、サブクエリーだめなんですかね…。。
ありがとうございます。

補足日時:2004/08/16 11:09
    • good
    • 0

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