在两列上连接表

时间:2016-02-13 00:56:37

标签: mysql sql

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

用户:

--------------------------------------------------
| 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|
--------------------------------------------------

2 个答案:

答案 0 :(得分:3)

你需要两个连接。如果一个或两个用户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;

答案 1 :(得分:2)

听起来你想要在一行中获得两个用户的名字。假设是这样,那么您可以多次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

正如评论中所述,如果table2表中不存在users表中不存在的用户ID(或者您允许null值)已存储),您 使用outer join来获得所需的结果。

但是,如果是这种情况,您的数据库设计可能会遇到更大的问题。您不应该foreign keys没有相应的primary keys,除非这些可能是可以为空的。