出现NULL值应使用什么SQL语句?两表关联如何保留左表全部数据?
问题原因
INNER JOIN的匹配规则是仅保留两张表关联字段完全匹配的行,Session表中InvoiceId为空的行无法和Invoice表的Id字段匹配,所以会被直接过滤,这就是你丢失部分会话记录的原因。
解决方案
使用LEFT JOIN(左连接)替代INNER JOIN即可,左连接会强制保留左表(此处为Session表)的所有行,右表无匹配时对应字段会返回空值,刚好符合你保留全部Session数据的需求。
参考SQL语句
SELECT s.id, s.Description, s.Date, COALESCE(i.Number, '') AS InvoiceNumber, -- 匹配不到时返回空字符串,也可根据需求直接写i.Number返回NULL s.Amount, s.ClientId FROM Session s LEFT JOIN Invoice i ON s.InvoiceId = i.Id
执行后预期结果
| id | Description | Date | InvoiceNumber | Amount | ClientId |
|---|---|---|---|---|---|
| 9 | Coaching | 10-09-2021 | 202101 | 80,00 | 3 |
| 10 | Coaching | 17-09-2021 | 80,00 | 3 | |
| 11 | Therapy | 12-09-2021 | 202102 | 80,00 | 4 |
| 12 | Therapy | 19-09-2021 | 202102 | 80,00 | 4 |
内容的提问来源于stack exchange,提问作者Mirelle
相关产品推荐
相关产品推荐

