如何从具有不同值的两个单独数据表中查询两个

时间:2011-11-23 11:41:42

标签: mysql

我如何查询以下内容?

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 

我读过关于UNIONJoin的内容,但UNION要求表格具有相同的列数,而JOIN s似乎仅适用于2表?是否可以合并UNIONJoin 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

以上代码是否正确??

3 个答案:

答案 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的结果只有一个标题,列名取自查询中的第SELECTUSING。因此,在您的案例中,列名称将为“名称”。

  • 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
  • 但MySQL中没有[INNER] JOIN。其他RDBMS就像PostgreSQL一样。 Read here
    我怀疑,这不是你想要开始的,而是用普通的{{1}}替换它。阅读more in the manual 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列 - 你没有指定)