0

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

例如:

col1_a|col2_a|...|hasrowinb

4

3 回答 3

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

这将确保不会为 TableB 的每个匹配记录为表 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
于 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 回答