• ベストアンサー

Aテーブルの条件でBテーブルから抜き出し

すみません。大変困っています。 SQL文で Aテーブル、Bテーブルがありまして、 A.id = B.idがリレーションしています。 Aテーブルから、Bテーブルのidが無いデータだけを 取り出したいのですが、どういった例が考えられますでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.2

サブクエリーを使った例のほかに 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つ目あたりに例が載っています。

参考URL:
http://dev.mysql.com/doc/mysql/ja/JOIN.html#IDX1520

その他の回答 (2)

  • togino
  • ベストアンサー率75% (97/129)
回答No.3

私は普段 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 などを参考にしてください。

saruyamamonki
質問者

お礼

返信ありがとうございます。 >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 で実行し解決しました。 ありがとうございます。

回答No.1

MySQLはあまりよく知らないですが、 サブクエリーが使えれば次のSQL文で取り出せます。 SELECT A.* FROM A WHERE A.ID NOT IN (SELECT B.ID FROM B)

saruyamamonki
質問者

補足

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

関連するQ&A