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

标签 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 s,但是UNION要求表具有相同的列数,而 JOIN s 似乎只适用于 2 个表?可以合并UNIONJoin是吗?

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/

相关文章:

php - 在数据库中存储折线(谷歌地图)的更好方法是什么?

php - 我如何对下表进行排序并获得前 5-5 条记录,前 20-20 条记录?

mysql - 在具有多个记录的连接表中搜索

mysql - 如何显示其他用户创建的过程?

mysql - MySQL 会自动优化我的重复查询吗?

mysql - 如何按一个人的名字排序,同时插入昵称 ASC

php - 只是想知道为什么这不起作用,我想将数据从提交表单插入到数据库

php - 如何对两个数据库的结果进行排序

PHP 警告 : PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/msqli.so'

javascript - 如何获取mysql连接检查回调函数的返回数据?