Firebird-SQL:显示预定义值而不是什么都没有

Firebird-SQL: showing predefined values instead of nothing

我需要编写一个类似于以下内容的 SQL 查询:

SELECT c.*, p.amount
FROM claims c, payments p
WHERE claims.debit < payments.amount AND c.customerId = p.customerId

现在的问题是,此查询仅显示索赔,其中的付款属于此索赔。但我希望它显示每项索赔,如果没有归属付款,金额应该为零。

我怎样才能做到这一点?

顺便说一句,我在 Firebird-SQL 中这样做。

抱歉标题不好,我不知道如何更好地描述它。

感谢您的帮助

你应该使用 Left Outer Join

SELECT c.*, p.amount
FROM claims c Left Outer Join  payments p On c.customerId = p.customerId
WHERE claims.debit < payments.amount 

不确定 Firebird-SQL,如果付款为空,您应该能够使用 IsNull 短语或 Case 语句获取 0。

您应该执行 LEFT JOIN,但还要在 JOIN 条件中放置“<”结构。

select c.*,
       coalesce(p.amount, 0) amount
  from claims c
  left outer join payments p
    on c.customerId = p.customerId and
       c.debit < p.amount 

如果您确实像@whirl-mind 所说的那样,将根据 "NULL values" 评估 WHERE 并将过滤掉记录。