选择Join is Null的位置

时间:2016-12-07 23:44:02

标签: sql firebird

我有两个表,一个有项目,第二个有库存。 我想选择没有库存的物品。 在这种情况下,第二个表中没有数据。

表1

ID  Item
01  Car
02  Bike
03  Motorbike

表2

ID  Amount
01  1
02  -1

所以第03项目前没有库存。

我的SQL看起来像这样

SELECT
  ITEM.ITEMNR,
  LAGERBESTAND.AMOUNT
FROM
  ITEM
INNER JOIN STOCKAMOUNT ON STOCKAMOUNT.ITEMLFDNR = ITEM.LFDNR
GROUP BY
  ITEM.ITEMNR,
  STOCKAMOUNT.AMOUNT
HAVING
  STOCKAMOUNT.AMOUNT = 0

原因“库存量= 0”不起作用。

2 个答案:

答案 0 :(得分:3)

您需要左外连接,内连接仅返回满足连接条件的行。

我认为你不需要为此进行分组。

答案 1 :(得分:2)

这可以通过使用左连接来实现。

SELECT
  ITEM.ITEMNR,
  coalesce(STOCKAMOUNT.AMOUNT,0) amount
FROM ITEM
LEFT JOIN STOCKAMOUNT 
ON STOCKAMOUNT.ITEMLFDNR = ITEM.LFDNR
WHERE STOCKAMOUNT.ITEMLFDNR IS NULL