首页 > 解决方案 > 如何使用 INNER JOIN 进行选择,给出相关但不相关的记录

问题描述

我有这两张桌子:

用户

+----+-------+
| 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

因此,由于卢卡斯不在礼品表中,我得到以下信息:

+-------+----------+----------+
| name  | type     | quantity |
+-------+----------+----------+
| John  | clothing | 3        |
+-------+----------+----------+
| Peter | toy      | 1        |
+-------+----------+----------+
| Peter | clothing | 2        |
+-------+----------+----------+

那么,如果男孩没有收到礼物,我如何在结果中包含彼得,用“”和零填写类型和数量?

标签: mysqlsqlleft-joinsql-null

解决方案


你可以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

推荐阅读