问题描述
我有这两个表:
+----+-------+
| id | name |
+----+-------+
| 1 | John |
+----+-------+
| 2 | Peter |
+----+-------+
| 3 | Lucas |
+----+-------+
礼物
+----+--------+----------+----------+
| id | boy_id | type | quantity |
+----+--------+----------+----------+
| 1 | 1 | clothing | 3 |
+----+--------+----------+----------+
| 2 | 2 | toy | 1 |
+----+--------+----------+----------+
| 3 | 2 | clothing | 2 |
+----+--------+----------+----------+
我正在尝试查询“男孩收到的礼物”,如下所示:
+-------+----------+----------+
| name | type | quantity |
+-------+----------+----------+
| John | clothing | 3 |
+-------+----------+----------+
| Peter | toy | 1 |
+-------+----------+----------+
| Peter | clothing | 2 |
+-------+----------+----------+
| Lucas | "" | 0 |
+-------+----------+----------+
SELECT u.name,g.type,g.quantity FROM gifts g INNER JOIN users u ON g.boy_id = u.id
因此,由于卢卡斯不在 gifts 表中,因此我得到了以下信息:
+-------+----------+----------+
| name | type | quantity |
+-------+----------+----------+
| John | clothing | 3 |
+-------+----------+----------+
| Peter | toy | 1 |
+-------+----------+----------+
| Peter | clothing | 2 |
+-------+----------+----------+
那么,如果男孩没有收到礼物,我该如何在结果中包括彼得,用“”填充类型和数量,并用零填充?
解决方法
您可以left join
:
SELECT u.name,g.type,COALESCE(g.quantity,0) quantity
FROM users u
LEFT JOIN gifts g ON g.boy_id = u.id