Mysql 连接两列上的表
我一直试图连接到一个表,但使用了两个不同的列。好的,我有以下表格: 用户:Mysql 连接两列上的表,mysql,sql,Mysql,Sql,我一直试图连接到一个表,但使用了两个不同的列。好的,我有以下表格: 用户: -------------------------------------------------- | user_id | name | -------------------------------------------------- | 1 | Bob | --------
--------------------------------------------------
| 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|
--------------------------------------------------
我尝试了上面的查询,但没有返回任何内容。提前谢谢
编辑
我想退回这样的东西:
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|
--------------------------------------------------
听起来您想在一行中同时获取两个用户的名称。假设是这样,那么您可以多次
加入用户表:
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
如注释中所述,如果表2
中可能存在用户
表中不存在的用户ID(或者允许存储null
值),则可以使用外部联接
来获得所需的结果
但是,如果是这样,您的数据库设计可能会有更大的问题。您不应该有没有相应的主键的外键
,除非它们可能是可为空的。听起来您想在一行中获取两个用户的名称。假设是这样,那么您可以多次加入用户表:
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
如注释中所述,如果表2
中可能存在用户
表中不存在的用户ID(或者允许存储null
值),则可以使用外部联接
来获得所需的结果
但是,如果是这样,您的数据库设计可能会有更大的问题。您不应该有没有相应的主键的外键
,除非它们可能是可为空的。您需要两个联接。在一个或两个用户ID不匹配的情况下,通常使用左连接来完成此操作:
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;
你需要两个连接。在一个或两个用户ID不匹配的情况下,通常使用左连接来完成此操作:
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;
你期望的结果是什么?也许您真的想多次加入users
表,以获得table2
中每个用户的名称?您想要的结果是什么?也许您真的想多次加入users
表,以获取table2
中每个用户的名称?如果我错了,请纠正我,使用内部联接有点危险。。因此,如果任何一个联接未找到匹配项,则不会返回任何结果。根据所讨论的示例,您的查询不会获取任何结果,是吗?@SethuSabarish——在发布的数据中,有两个用户,id 1和id 2。两者都存在。在一个像样的数据库设计中,会有一些约束来确保不会丢失用户。然而,如果是这样的话,那么转换为外部联接就相当简单了
…如果我错了,请纠正我,使用内部联接有点危险。。因此,如果任何一个联接未找到匹配项,则不会返回任何结果。根据所讨论的示例,您的查询不会获取任何结果,是吗?@SethuSabarish——在发布的数据中,有两个用户,id 1和id 2。两者都存在。在一个像样的数据库设计中,会有一些约束来确保不会丢失用户。然而,如果是这样的话,那么转换为外部联接就相当简单了
。。。。