0

テーブルAとBを想定して、Aのすべての列と、Bに対応する子行が存在することを示すフラグを返すクエリを作成するにはどうすればよいですか。

例えば:

col1_a | col2_a | ... | hasrowinb

4

3 に答える 3

2

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
于 2012-10-04T17:48:28.030 に答える
1

これにより、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
于 2012-10-04T17:54:27.747 に答える
1

おそらく、重複がないことを保証しながら、クエリを実行する「最も簡単な」方法は次のとおりです。

select a.*,
       (case when 0 = (select count(*) from b where b.aid = a.aid)
             then 'N'
             else 'Y'
        end) as hasRowInB
from a
于 2012-10-04T18:04:40.783 に答える