繁体   English   中英

在两列上联接表

[英]Join Tables On Two Columns

我一直在尝试加入一个表,但使用两个不同的列。 好的,所以我有下表:

使用者:

--------------------------------------------------
| user_id | name                                 |
--------------------------------------------------
| 1       | Bob                                  |
--------------------------------------------------
| 2       | John                                 |
--------------------------------------------------

表2:

--------------------------------------------------
| user_one | user_two  | field3                  |
--------------------------------------------------
| 1        | 2         | something here          |
--------------------------------------------------

他们使用这两个字段来联接用户表的任何方式。 像这样:

SELECT 
 table2.*,
 users.name
FROM table2
INNER JOIN users
ON users.user_id = table2.user_one AND users.user_id = table2.user_two

我已经尝试了上面的查询,但没有返回任何内容。 提前致谢。

编辑我想返回如下内容:

--------------------------------------------------
| user_one_name | user_two_name  | field3        |
--------------------------------------------------
| Bob           | John           | something here|
--------------------------------------------------

您需要两个联接。 如果一个或两个用户ID不匹配,通常使用left join联接完成此操作:

SELECT t2.*, u1.name as user1name, u2.name as user2name
FROM table2 t2 LEFT JOIN
     users u1
     ON u1.user_id = t2.user_one LEFT JOIN
     users u2
     ON u2.user_id = t2.user_two;

听起来您想在一行中同时获得两个用户的名称。 假设这样,那么您可以多次joinusers表:

SELECT 
    table2.*,
    u1.name user1name,
    u2.name user2name
FROM table2 t2
    INNER JOIN users u1 ON u1.user_id = t2.user_one
    INNER JOIN users u2 ON u2.user_id = t2.user_two

作为在评论中提到,如果有可能,你有用户ID在table2中不存在的users表(或在允许null将被存储的值),您可以使用outer join ,而不是得到您想要的结果。

但是,在这种情况下,您的数据库设计可能会遇到更大的问题。 除非foreign keys可能为空,否则您不应有没有相应primary keysprimary keys

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM