gpt4 book ai didi

mysql - 选择分组的行,即使它们不在另一个表中

转载 作者:可可西里 更新时间:2023-11-01 07:46:27 25 4
gpt4 key购买 nike

给 SQL 问题加标题很难!如果您能想到如何更好地描述它,请随意更改它!

我有一个非常典型的设置:3 个表,usersgroupsgroup_members

这是一个 SQL fiddle :http://sqlfiddle.com/#!2/23712/1

我想知道哪些用户属于哪些组。

所以,我正在运行:

SELECT u.id, u.firstname, u.lastname,
GROUP_CONCAT(m.group_id) as groups
FROM group_members m, users u
WHERE m.user_id = u.id
GROUP BY id
ORDER BY u.lastname ASC

这很酷,并向我显示了用户名和他们所在的组。

我的问题是不在任何组中的用户不会出现,因为 WHERE 位当然不匹配他们。

如何返回不在任何组中的用户? (在上面的 SQL Fiddle 中,我想要 Zack Jones 的另一行,表明他要么在组 0 中,要么是 NULL 之类的!)

最佳答案

您将希望对group_members 上的users 表使用LEFT JOIN:

SELECT u.id, 
u.firstname,
u.lastname,
GROUP_CONCAT(m.group_id) as groups
FROM users u
LEFT JOIN group_members m
ON u.id = m.user_id
GROUP BY u.id, u.firstname,
u.lastname
ORDER BY u.lastname ASC

参见SQL Fiddle with Demo

或者你可以RIGHT JOIN group_members users

SELECT u.id, 
u.firstname,
u.lastname,
GROUP_CONCAT(m.group_id) as groups
FROM group_members m
RIGHT JOIN users u
ON m.user_id = u.id
GROUP BY id, u.firstname,
u.lastname
ORDER BY u.lastname ASC

参见SQL Fiddle with Demo

关于mysql - 选择分组的行,即使它们不在另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12180595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com