确定哪个连接添加到结果集的行

时间:2012-10-25 21:44:29

标签: sql join

我开始在这个帖子中提出一个问题: Need SQL guru for a complex query

我现在已经解决了(感谢SO),但现在需要提取更多数据。

假设我有一个连接其他2个表的查询,其中三个表中的每个表中的条件都可以将行添加到结果集中。类似的东西:

    SELECT a.*
    FROM tableA a
    LEFT JOIN tableB b on a.b_id = b.id
    LEFT JOIN tableC c on a.c_id = c.id
    WHERE a.creator_id = 5 OR b.is_active = 1 OR c.can_attend = 1

无论数据是什么......基本上我需要做的是为结果集中的每一行确定允许它的标准。是因为creator_id是5,还是因为它是活动的等等。

从这个过于简化的示例中,您可以说只是查看数据,但请注意表b和c的数据未被返回,并注意到连接可以通过多种方式将行添加到结果集。

我认为,我想要的是在将行添加到结果集时注入值,或者为此产生某种效果的方法。如果你看一下上面链接问题中接受的答案,会更有意义。

感谢您的任何意见!

1 个答案:

答案 0 :(得分:1)

您可以使用案例陈述来执行此操作:

SELECT a.*,
       (case when b.id is not null and c.id is not null then 'BOTH'
             when b.id is not null and c.id is null then 'B'
             when b.id is null and c.id is not null then 'C'
             else 'A'
        end) as WhereFrom
FROM tableA a
LEFT JOIN tableB b on a.b_id = b.id
LEFT JOIN tableC c on a.c_id = c.id
WHERE a.creator_id = 5 OR b.is_active = 1 OR c.can_attend = 1