是否可以将一个表中的所有字段与其他第三个表匹配?

时间:2016-03-18 06:17:37

标签: mysql sql

我想知道这个问题是否可以在一个查询中解决:

有三个表:
users (id, name, is_online)
groups (id, name)
user_groups (user_id, group_id)

因此,我需要获得拥有' 1'在is_online字段中以及所有具有某个标记的组 - 无论用户是否属于某个组。

例如,如果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        |

我正在考虑使用像完全加入这样的机制,但仍然无法想出如何通过第三个表正确地组合用户和组。

1 个答案:

答案 0 :(得分: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

Demo here