Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接两列上的表_Mysql_Sql - Fatal编程技术网

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。两者都存在。在一个像样的数据库设计中,会有一些约束来确保不会丢失用户。然而,如果是这样的话,那么转换为
外部联接就相当简单了
。。。。