如果从另一个表中找不到匹配的记录,则添加默认值

时间:2018-07-26 08:26:51

标签: sql sql-server

我有三个桌子

成员

  • id
  • 名称
  • 地址

tax_bill

  • bill_id
  • member_id
  • tax_amount

tax_receipt

  • receipt_id
  • member_id
  • paid_amount

输出:

Name | Address | Tax | Paid Tax
ABC  | xyz     | 100 |100
PQR  | yte     | 200 | Not paid

此处“未付款”是默认值,该默认值在收据表中不存在,记录仅在会员和账单表中。

在上面的表格中,我想显示成员详细信息以及其账单详细信息和收据详细信息。最初tax_receipt将为空,当用户付款时,该条目将在tax_receipt详细信息中。我想创建一个报告,其中将显示成员表中的所有成员详细信息,tax_bill中的税收详细信息和tax_receipt中的收据详细信息。我要显示的是零,如果在tax_receipt表中找不到该会员的tax_bill详细信息的记录。

此外,我正在使用联接查询,因此如果建议将使用联接查询,它将很有用。

预先感谢您:)

2 个答案:

答案 0 :(得分:1)

您似乎想要json

URL1

答案 1 :(得分:1)

这是您需要的(考虑您提供的示例表):

select m.name, m.address, t.tax_amount, case when isnull(r.paid_amount, 0) = 0 then 'not paid' else cast(r.paid_amount as varchar(100)) end as paid_tax
from member m join tax_bill t on m.id = t.member_id
              left join tax_receipt r on m.id = r.member_id

有一个工作副本here

但是,对于注释中提到的复杂的长查询,您应该先对其进行格式化以使其清晰易读,然后阅读the importance of the join order when using left-right-full joins以便按照您的需要以正确的顺序加入,然后尝试通过以下方式删除一个找出丢失的记录丢失的地方。

祝你好运!