【问题标题】:How to select with INNER JOIN, giving related but also unrelated records如何使用 INNER JOIN 进行选择,给出相关但不相关的记录
【发布时间】:2020-11-04 16:24:35
【问题描述】:

我有这两张桌子:

用户

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

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

【问题讨论】:

    标签: mysql sql left-join sql-null


    【解决方案1】:

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

    【讨论】:

    • 是的,这就是“外部连接”的用途。
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 2021-10-21
    • 2021-01-01
    • 2020-06-25
    • 1970-01-01
    • 2014-09-10
    • 2018-10-11
    • 2010-10-23
    相关资源
    最近更新 更多