- ベストアンサー
Aテーブルの条件でBテーブルから抜き出し
すみません。大変困っています。 SQL文で Aテーブル、Bテーブルがありまして、 A.id = B.idがリレーションしています。 Aテーブルから、Bテーブルのidが無いデータだけを 取り出したいのですが、どういった例が考えられますでしょうか?よろしくお願いします。
- みんなの回答 (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#IDX1520 の上から3つ目あたりに例が載っています。
その他の回答 (2)
- togino
- ベストアンサー率75% (97/129)
私は普段 PostgreSQL を使っているので MySQL のリファレンスを見ながら回答していますが・・・ MySQL でサブクエリーが使えないってことはないでしょう(汗) > 動きません。 > MySQLでは、サブクエリーだめなんですかね…。。 なんというエラーが出ているのか、教えて欲しいですね。 SELECT * FROM A WHERE id <> ANY (SELECT id FROM B); とかではどうでしょう? サブクエリーを使った例は http://dev.mysql.com/doc/mysql/ja/ANY_IN_SOME_subqueries.html などを参考にしてください。
- rotesKomet
- ベストアンサー率31% (83/265)
MySQLはあまりよく知らないですが、 サブクエリーが使えれば次のSQL文で取り出せます。 SELECT A.* FROM A WHERE A.ID NOT IN (SELECT B.ID FROM B)
補足
動きません。 MySQLでは、サブクエリーだめなんですかね…。。 ありがとうございます。
お礼
返信ありがとうございます。 >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 で実行し解決しました。 ありがとうございます。