- ベストアンサー
同じ値が存在しないレコードの抽出方法について
- b_tableテーブルのidフィールドの値が1つしかない(重複していない)フィールドを抽出する方法を教えてください。
- 抽出条件を記述することで、b_tableテーブルから重複していないidフィールドを抽出することができます。
- 既存のSQL文に抽出条件を追加したい場合、WHERE以前の部分を変更する必要がありますが、具体的なソースコードがないため、移植方法は分かりません。
- みんなの回答 (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;
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
命題は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);
お礼
ご回答ありがとうございます。 ご教示いただいたSQL文で質問で提示させていただいたテーブルでは動作していると思います。 うまく移植できるかは分かりませんが、ご提示いただいたソースを試してみるようにします。 このたびはどうもありがとうございました。
- nora1962
- ベストアンサー率60% (431/717)
実行効率は悪いですが、 「1 = ( select count(*) from b_table b2 where a.id =b2.id group by b2.id)」 ではどうですか?
お礼
ご回答ありがとうございます。 ご教示いただいた下記の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) うまく移植できるかは分かりませんが、ご提示いただいたソースを試してみるようにします。 このたびはどうもありがとうございました。
お礼
ご回答ありがとうございます。 ご教示いただいたSQL文で質問で提示させていただいたテーブルでは動作していると思います。 うまく移植できるかは分かりませんが、ご提示いただいたソースを試してみるようにします。 このたびはどうもありがとうございました。