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 并将过滤掉记录。
我需要编写一个类似于以下内容的 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 并将过滤掉记录。