我如何查询以下内容?
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
s,但是UNION
要求表具有相同的列数,而 JOIN
s 似乎只适用于 2 个表?可以合并UNION
和Join
是吗?
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
上面的代码对吗?
最佳答案
尝试这个简化的查询:
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
在查询中。因此,在您的情况下,列名称将为“Name”。USING
只是ON
的语法简化当连接列共享相同的名称并且仅在连接的左侧和右侧出现一次时。表别名
User AS u
或者简单地User u
简化代码中的后续引用。您可以
JOIN
想要多少张 table 就可以,不限于两张 table 。我怀疑,你真正想要的是这样的:
SELECT u.Name, g.Description
FROM User u
JOIN User_Groups USING (Id_user)
JOIN Group g USING (Id_group)
- 但是没有
FULL [OUTER] JOIN
在 MySQL 中。其他 RDBMS 也有这样的功能,比如 PostgreSQL。 Read here .
我怀疑,这不是您想要开始的,并将其替换为简单的[INNER] JOIN
。阅读 more in the manual here .
关于mysql - 如何从两个具有不同值的单独数据表中查询两个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8241578/