• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同じ値が存在しないレコードの抽出方法について)

同じ値が存在しないレコードの抽出方法について

このQ&Aのポイント
  • b_tableテーブルのidフィールドの値が1つしかない(重複していない)フィールドを抽出する方法を教えてください。
  • 抽出条件を記述することで、b_tableテーブルから重複していないidフィールドを抽出することができます。
  • 既存のSQL文に抽出条件を追加したい場合、WHERE以前の部分を変更する必要がありますが、具体的なソースコードがないため、移植方法は分かりません。

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

SELECT a.id FROM `a_table` AS a LEFT JOIN `b_table` AS b ON a.id = b.id WHERE 1 GROUP BY a.id HAVING COUNT( a.id ) = 1;

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたSQL文で質問で提示させていただいたテーブルでは動作していると思います。 うまく移植できるかは分かりませんが、ご提示いただいたソースを試してみるようにします。 このたびはどうもありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

命題はb_tableのみで完結している話なので、わざわざa_tableにleft joinする 意味はまったくないですね 端的にやるなら select id from b_table group by id having count(*)=1; で十分、aにjoinするのが外せないならそのままサブクエリでつなげてやる SELECT a.id FROM `a_table` AS a LEFT JOIN `b_table` AS b ON a.id = b.id WHERE b.id in( select id from b_table group by id having count(*)=1);

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたSQL文で質問で提示させていただいたテーブルでは動作していると思います。 うまく移植できるかは分かりませんが、ご提示いただいたソースを試してみるようにします。 このたびはどうもありがとうございました。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

実行効率は悪いですが、 「1 = ( select count(*) from b_table b2 where a.id =b2.id group by b2.id)」 ではどうですか?

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいた下記のSQL文で質問で提示させていただいたテーブルでは動作していると思います。 SELECT a.id FROM `a_table` AS a LEFT JOIN `b_table` AS b ON a.id = b.id WHERE 1 = ( select count(*) from b_table b2 where a.id =b2.id group by b2.id) うまく移植できるかは分かりませんが、ご提示いただいたソースを試してみるようにします。 このたびはどうもありがとうございました。

関連するQ&A