我想知道是否可以在一个查询中解决这个问题:
一共有三个表:
用户(id, name, is_online)
组(id,名称)
user_groups (user_id, group_id)
因此,我需要获得在 is_online
字段中具有“1”的用户和所有带有标记的组的组合——无论该用户是否属于某个组。
例如,如果 groups
表中只有三个组,结果将是这样的:
| user_id | group_id | in_group |
| 100 | 1 | 1 |
| 100 | 2 | 0 |
| 100 | 3 | 0 |
| 101 | 1 | 0 |
| 101 | 2 | 0 |
| 101 | 3 | 0 |
| 102 | 1 | 1 |
| 102 | 2 | 1 |
| 102 | 3 | 1 |
我正在考虑使用某种机制,如完全连接,但仍然无法想出如何通过第三个表正确组合用户和组。
最佳答案
您必须CROSS JOIN
用户与组,以便获得两个表的记录之间所有可能组合的列表。然后 LEFT JOIN
user_groups
表来查看每个组合是否匹配:
SELECT u.id, u.name, IF(ug.user_id IS NOT NULL, 1, 0)
FROM users AS u
CROSS JOIN groups AS g
LEFT JOIN user_groups AS ug ON u.id = ug.user_id AND g.id = ug.group_id
WHERE u.is_online = 1
关于mysql - 是否可以通过第三个表将一个表中的所有字段与其他表中的所有字段进行匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077448/