如何查找LEFT JOIN是否加入了实际行或占位符NULL值?

时间:2015-01-05 08:35:04

标签: sql left-join

假设我发出如下查询:

SELECT a.x, b.y FROM a LEFT JOIN b ON b.id = a.id

我还想知道来自b的行是否实际加入,或者 NULL提供了占位符LEFT JOIN 。我想我可以确定它在结果中比较a.idb.id的值,但有没有办法在查询本身中执行此操作?

即。我想要像

这样的东西
SELECT a.x, b.y, b_is_actually_joined FROM a LEFT JOIN b ON b.id = a.id

其中b_is_actually_joined列中的值为1或0(例如)。

2 个答案:

答案 0 :(得分:3)

只需检查NULL b.id:

SELECT a.x, b.y, b.id IS NOT NULL AS b_is_actually_joined 
FROM a 
LEFT JOIN b ON b.id = a.id

对于Oracle SQL,您可以使用NVL2功能:

SELECT a.id, b.*, NVL2(b.id, 1, 0) AS b_is_actually_joined 
FROM a 
LEFT JOIN b ON b.id = a.id

SQL Fiddle

答案 1 :(得分:1)

这应该适用于Sql Server Ms:

select CAST((coalesce(b.id, 0)) as bit) as b_is_actually_joined FROM a 
LEFT JOIN b ON b.id = a.id

我不知道这个

的标准SQL解决方案