テーブルAとBを想定して、Aのすべての列と、Bに対応する子行が存在することを示すフラグを返すクエリを作成するにはどうすればよいですか。
例えば:
col1_a | col2_a | ... | hasrowinb
テーブルAとBを想定して、Aのすべての列と、Bに対応する子行が存在することを示すフラグを返すクエリを作成するにはどうすればよいですか。
例えば:
col1_a | col2_a | ... | hasrowinb
bが子行であるとすると、b.a_id = a.idの場合、これは機能します。
子の定義に合わせて結合を調整します。
SELECT a.*, CASE WHEN b.id IS NULL THEN 0 ELSE 1 END AS hasrowinb
FROM a
LEFT JOIN b ON a.id = b.a_id
これにより、TableBの一致するレコードごとにTableAの重複が作成されないようになります。
SELECT a.*, b.HasRowInB
FROM TableA a
LEFT OUTER JOIN (
SELECT a.id, CASE COUNT(b.id) WHEN 0 THEN 0 ELSE 1 END as HasRowInB
FROM TableA a
LEFT JOIN TableB b on a.id = b.a_id
GROUP BY a.id
) b on a.id = b.id
おそらく、重複がないことを保証しながら、クエリを実行する「最も簡単な」方法は次のとおりです。
select a.*,
(case when 0 = (select count(*) from b where b.aid = a.aid)
then 'N'
else 'Y'
end) as hasRowInB
from a