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

Mysql 如何从两个具有不同值的独立数据表中查询两个,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 我读过关于UNION和Joins的文章,但是UNION要求表具有相同的列数,而Joins似乎只能处理两个表??是否可以组合联合和加入s SELECT Use

我将如何质疑以下问题

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似乎只能处理两个表??是否可以组合
联合
加入
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

上述代码是否正确???

尝试此简化查询:

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”

  • 使用
    只是对上的
    进行语法简化,因为连接列共享相同的名称,并且只在连接的左侧和右侧出现一次

  • 表别名为用户u或简单地将用户u简化为代码中的后续引用

  • 您可以
    JOIN
    任意多个表,但不限于两个表。我想,你真正想要的是:

  • 但是MySQL中没有
    FULL[OUTER]连接。其他RDBMS也有,比如PostgreSQL
    我怀疑,这不是您想要的开始,并将其替换为普通的
    [internal]JOIN
    。阅读

尝试此简化查询:

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”

  • 使用
    只是对
    上的
    进行语法简化,因为连接列共享相同的名称,并且只在连接的左侧和右侧出现一次

  • 表别名为用户u或简单地将用户u简化为代码中的后续引用

  • 您可以
    JOIN
    任意多个表,但不限于两个表。我想,你真正想要的是:

  • 但是MySQL中没有
    FULL[OUTER]连接。其他RDBMS也有,比如PostgreSQL
    我怀疑,这不是您想要的开始,并将其替换为普通的
    [internal]JOIN
    。阅读
试试:

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

不确定您为什么要使用
联合
?(除非您需要1列—您没有指定)

尝试:


不确定您为什么要使用
联合
?(除非您需要1列—您没有指定)

我想,您也可以试试这个,不需要join

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;

试试这个,我想,不需要加入

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;

你的预期产出是多少?单列?您的预期输出是什么?一个专栏?我们对问题的理解不同(我阅读了多对多关系)!!我以为OP需要2列,只是对UNION语法感到困惑+1我对使用MySQL很陌生-使用SO学习更复杂的查询(如连接)-刚从您的答案中发现使用-所以如果没有其他东西,您可以教我一些东西@ManseUK:我刚才才看到你的评论,但我同意你的解释-n:m关系-正如你从我的答案中添加的部分所看到的。嗯,好的,我尝试了这个查询,我得到了以下错误:由:br.dao.dao异常引起:java.sql.SQLException:Column'id\u user'未找到。当我的表、user\u组和user都有id\u user列时,为什么找不到id\u user列?I user\u组是一个关联实体,与user有多对1关系,与Group有多对1关系。User\u Group表将Id\u User和Id\u Group作为主复合键。我希望User_Group表通过IDS显示两列数据(用户名称、组描述)。我们以不同的方式读取问题(我读取多对多关系)!!我以为OP需要2列,只是对UNION语法感到困惑+1我对使用MySQL很陌生-使用SO学习更复杂的查询(如连接)-刚从您的答案中发现使用-所以如果没有其他东西,您可以教我一些东西@ManseUK:我刚才才看到你的评论,但我同意你的解释-n:m关系-正如你从我的答案中添加的部分所看到的。嗯,好的,我尝试了这个查询,我得到了以下错误:由:br.dao.dao异常引起:java.sql.SQLException:Column'id\u user'未找到。当我的表、user\u组和user都有id\u user列时,为什么找不到id\u user列?I user\u组是一个关联实体,与user有多对1关系,与Group有多对1关系。User\u Group表将Id\u User和Id\u Group作为主复合键。我希望User_Group表按id显示两列数据(用户名称、组描述)