SQL查询表示存在相应的行

时间:2012-10-04 17:44:42

标签: sql

假设表A和B,我如何编写一个返回A的所有列的查询和一个表示B中存在相应子行的标志

例如:

col1_a | col2_a | ... | hasrowinb

3 个答案:

答案 0 :(得分:2)

如果b.a_id = a.id,则b是子行,那么这将起作用。

将联接调整为您对孩子的定义。

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

答案 1 :(得分:1)

这将确保为表B的每个匹配记录创建表A的重复项。

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

答案 2 :(得分:1)

也许以下是执行查询的“最简单”方式,同时保证不存在重复:

select a.*,
       (case when 0 = (select count(*) from b where b.aid = a.aid)
             then 'N'
             else 'Y'
        end) as hasRowInB
from a