假设表A和B,我如何编写一个返回A的所有列的查询和一个表示B中存在相应子行的标志
例如:
col1_a | col2_a | ... | hasrowinb
答案 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