用于显示另一个表中缺少记录的SQL查询

时间:2018-05-16 19:01:21

标签: sql firebird firebird2.5

我在customers表中有一个名单。第二个表包含事件。 如果事件表中缺少一个名称,它应该从customers.name表中使用" 0"值。

客户表:

|   NAME    |  ADDRESS  |
+-----------+-----------+
|   Chris   |    XXX    |
|   Tom     |    YYY    |
|   John    |    ZZZ    |

活动表:

   NAME   |   QUANTITY   |
----------+--------------+
  Chris   |       2      |
  Tom     |       4      |

如果事件表中缺少一个名称,则查询应从Customers表中添加该名称。 (仅用于显示,不应将其添加到记录中)。

结果应该是这样的:

   NAME   |   QUANTITY   |
----------+--------------+
  Chris   |       2      |
  Tom     |       4      |
  John    |       0      |

我正在使用Firebird 2.5

3 个答案:

答案 0 :(得分:3)

您可以使用左连接

select a.name, coalesce(b.quantity, 0) as  quantity
from Customers  a 
left join Events  b on a.name = b.name 

答案 1 :(得分:3)

这是left join的作用:

select c.name, coalesce(e.quantity, 0) as quantity
from customers c left join
     events e
     on c.name = e.name;

答案 2 :(得分:3)

或isnull

select a.name, isnull(b.quantity, 0) quantity
from Customers  a 
left join Events  b on a.name = b.name