我一直在尝试加入一个表但使用两个不同的列。好的,我有以下表格:
用户:
--------------------------------------------------
| 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|
--------------------------------------------------
答案 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)
听起来你想要在一行中获得两个用户的名字。假设是这样,那么您可以多次join
到users
表:
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
,除非这些可能是可以为空的。