【问题标题】:SQL request LEFT JOINSQL 请求 LEFT JOIN
【发布时间】:2012-09-11 16:08:07
【问题描述】:

假设我有这些表: 我的 sql 请求应该是什么才能得到预期的结果?

表用户组:

group_id          |   user_id       |   is_active
1                          2               1
1                          3               1
2                          2               1
4                          2               1

表组:

id |     name
1       group1
2       group2
3       group3
4       group4
5       group5
6       group5

预期结果

group_id       |      name      | user_id    |   is_active
 1                   group1         2               1
 2                   group2         2               1
 3                   group3         2               0
 4                   group4         2               1
 5                   group5         2               0
 6                   group6         2               0

我试过了

SELECT g.id, g.name, ug.user_id, ug.is_active
FROM group g
LEFT OUTER JOIN user_group uc ON ug.group_id = g.id
WHERE ug.user_id =2

但我只有用户 2 所在的组(因此 group1、group2 和 group4)

【问题讨论】:

    标签: mysql sql request left-join


    【解决方案1】:

    试试这个:

    SELECT  id ,
            name ,
            COALESCE(user_ID, 2) user_id ,
            COALESCE(is_active, 0) is_active
    FROM    tableGroup
            LEFT JOIN user_group ON id = group_id
                                    AND user_Id = 2
    

    你可以摆弄这个here

    【讨论】:

      【解决方案2】:
      SELECT g.id, g.name, ug.user_id, ug.is_active 
      FROM group g 
      LEFT OUTER JOIN user_group uc ON ug.group_id = g.id AND ug.user_id =2 
      

      当 where 子句中有条件时,将左连接变为内连接。

      【讨论】:

      • @Mathieu - 由于 LEFT JOIN,这会将 NULL 放入第 3、5 和 6 组。因此与您的预期输出不匹配。我错过了什么?检查fiddle。您是否弄错了要求它们为 NULL 而不是 2-0 的问题?
      • @Kash 似乎是对的,我没有注意到那部分。如果您同意,请取消选择我作为正确答案并检查他的答案。
      • 是的,我想出了如何通过合并自己完成这项工作。谢谢你,Kash,我检查你是正确的答案
      【解决方案3】:
      SELECT table_group.*, user_group.user_id, IFNULL(user_group.is_active, 0)
      FROM table_group
      LEFT JOIN user_group ON table_group.id = user_group.group_id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-10
        • 2010-09-29
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 2021-04-05
        • 2016-04-11
        相关资源
        最近更新 更多