我有3个表,用户,组和用户组。
UserGroups拥有User id_user和Group id_group。
用户拥有id_user,而群组拥有id_group。
我的问题是:
如何从所有3个表中提取数据以实现以下目标:
我有以下SQL语句,但我希望将它们组合成1个sql语句。有可能??
select * from grupos
和
SELECT DISTINCT usuarios.id_usuario
FROM usuarios
WHERE usuarios.id_usuario
NOT IN (SELECT DISTINCT id_usuario FROM usuarios_grupos)
因此,第一个查询显示:
Groups
第二个查询显示以下内容:
User
1. John
2. Jane
3. Tom
User Group
Empty
After selection of John:
User
2. Jane
3. Tom
User Group
1. John
Instead of having the following (which I have now):
User
1. John
2. Jane
3. Tom
After Selection of John:
UserGroup
1. John
就像我上面演示的那样,如果我选择一个组和一个用户,并将其添加到用户组。用户组将显示“组,用户”。 (例如发展,汤姆)。
但是,“组”数据表仍将显示如下:
用户数据表将被“更新”:
我尝试了以下内容,但我没有得到我想要的结果:
SELECT grupos.id_grupo, usuarios.id_usuario
FROM usuarios_grupos
INNER JOIN
grupos
ON
usuarios_grupos.id_grupo = grupos.id_grupo
INNER JOIN
usuarios
ON
usuarios_grupos.id_usuario = usuarios.id_usuario
WHERE
usuarios.id_usuario
NOT IN (SELECT DISTINCT id_usuario FROM usuarios_grupos)
答案 0 :(得分:0)
列出拥有属于他们的用户的组的最简单方法是:
SELECT DISTINCT id_grupo FROM usuarios_grupos
列出不的用户属于他们的群组的最简单方法是:
SELECT DISTINCT id_grupo
FROM grupos
WHERE id_grupo
NOT IN (SELECT DISTINCT id_grupo FROM usuarios_grupos)
编辑:要列出不属于组的用户以及其中包含用户的所有组,您可以合并返回每个集的查询结果 -
SELECT DISTINCT id_usuario
FROM usuarios
WHERE id_usuario
NOT IN (SELECT DISTINCT id_usuario FROM usuarios_grupos)
UNION ALL
SELECT DISTINCT id_grupo FROM usuarios_grupos
或者您可以在一个查询中执行此操作:
SELECT DISTINCT COALESCE(ug.id_grupo, u.id_usuario)
FROM usuarios u
LEFT JOIN usuarios_grupos ug ON u.id_usuario = ug.id_usuario
(最后一个查询假设组和用户ID集之间没有重叠。)