【问题标题】:I'm trying to match different tables without a primary key我正在尝试匹配没有主键的不同表
【发布时间】:2021-08-20 14:18:22
【问题描述】:

在发布此之前,我搜索了答案,但找不到我的问题的确切解决方案。

首先,我只是假设我需要 INNER JOIN 来解决它。 FULL OUTER JOIN 也可以解决问题。

我在一个数据库中有 3 个不同的表。

表 1

userId roleID
1 1
2 2

表 2

userId userName
1 A
2 B

表 3

roleId roleName
1 X
2 Y

我的目标是编写一个查询,它将表 2 中的 userName 与输出中表 3 的 roleName 匹配。它应该是这样的:

输出

UserName RoleName
A X
B Y

我想不通。任何帮助将不胜感激。

非常感谢!

编辑: 到目前为止,我正在尝试修改以下查询来完成这项工作:

SELECT * FROM
table1.roleId 
INNER JOIN
table2.roleId 
ON table1.roleId = table3.roleId
INNER JOIN
table2.userId 
ON table2.userId = table3.roleId

【问题讨论】:

  • 提示:JOINJOIN 再次。你试过什么?
  • 检查这个网站:w3schools.com/sql/sql_ref_join.asp你应该会找到有用的提示
  • 这有什么问题?你可以在几乎任何列上使用 JOIN,所以如果你想加入相同的名字,就这样做

标签: mysql sql


【解决方案1】:

只需将所有表连接在一起,条件如下:

  1. 表 2 用户 ID = 表 1 用户 ID
  2. 表 3 角色 ID = 表 1 角色 ID

然后只选择那些与您相关的值。

我认为这应该可以完成工作:

select t2.userName, t3.roleName
from table2 t2
join table1 t1 on t2.userId = t1.userId
join table3 t3 on t3.roleId = t1.roleId;

上面的查询使用 INNER JOIN 来获取结果。 如果在表 1 中有没有 roleIduserIds,如果存在此类条目,FULL OUTER JOIN 也会返回带有空角色名称的用户名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多