我如何查询以下内容?
User.name and Groups.description,
from the User table and Groups table,
where User.id_user = User_Group.id_user, and Groups.id_groups = User_Group.id_groups
我读过关于UNION
和Join
的内容,但UNION
要求表格具有相同的列数,而JOIN
s似乎仅适用于2表?是否可以合并UNION
和Join
s?
SELECT User.Name
FROM User
FULL JOIN User_Groups
ON User.Id_user= User_Groups.Id_user
UNION
SELECT Group.Description
FROM Group
FULL JOIN User_Groups
ON Group.Id_group= Groups.Id_group
以上代码是否正确??
答案 0 :(得分:2)
试试这个简化的查询:
SELECT u.Name
FROM User u
JOIN User_Groups USING (Id_user)
UNION ALL
SELECT g.Description
FROM Group g
JOIN User_Groups USING (Id_group)
使用UNION ALL
代替UNION
,因为UNION
会消除具有相同值的所有行。
UNION
的结果只有一个标题,列名取自查询中的第SELECT
个USING
。因此,在您的案例中,列名称将为“名称”。
ON
只是User AS u
的语法简化,当加入列共享相同的名称时,只会在连接的左右两侧出现。
表别名User u
或简称JOIN
简化了代码中的后续引用。
您可以SELECT u.Name, g.Description
FROM User u
JOIN User_Groups USING (Id_user)
JOIN Group g USING (Id_group)
尽可能多的表,这不仅限于两个表。我怀疑,你真正想要的是:
FULL [OUTER] JOIN
[INNER] JOIN
。其他RDBMS就像PostgreSQL一样。 Read here。答案 1 :(得分:1)
我认为,尝试这一点也不需要加入。
SELECT u.name, g.description FROM User u, Groups g, User_Group ug, Groups.id gi
WHERE u.id_user=g.id_user and g.id_groups=ug.id_groups;
答案 2 :(得分:0)
尝试:
SELECT User.Name, Groups.Description
FROM User
JOIN User_Group on User.id_user = User_Group.id_user
JOIN Groups on Groups.id_groups = User_Group.id_groups
或
SELECT User.Name, Groups.Description
FROM User
JOIN User_Group USING (id_user)
JOIN Groups USING (id_groups)
不确定为什么要使用union
? (除非你想要1列 - 你没有指定)