Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
我对我的SQL连接感到困惑,因为它';结果与我的预期不同_Sql - Fatal编程技术网

我对我的SQL连接感到困惑,因为它';结果与我的预期不同

我对我的SQL连接感到困惑,因为它';结果与我的预期不同,sql,Sql,我正在尝试将一个表中的两列连接到另一个表中的一列,即将eng\u id和exam\u id从table1连接到table2中的user\u id select * from table1 t1, table2 t2 where t1.eng_id = t2.user_id and t1.exam_id = t2.user_id; 此查询仅返回表1中eng\u id和exami\u id相似的记录(两个id都是18或20),如果这两个id不同的任何记录,我看不到该记录。表1中的Eng_id

我正在尝试将一个表中的两列连接到另一个表中的一列,即将
eng\u id
exam\u id
table1
连接到
table2
中的
user\u id

select * 
from table1 t1, table2 t2
where t1.eng_id = t2.user_id
  and t1.exam_id = t2.user_id;
此查询仅返回表1中
eng\u id
exami\u id
相似的记录(两个id都是18或20),如果这两个id不同的任何记录,我看不到该记录。表1中的Eng_id和Exam_id=(等于)表2中的用户_id

尽管如此,该表还是充满了
eng\u id
exam\u id
不同的记录

你能解释一下为什么会这样吗?这是我的结果:


您提供的详细信息并不清楚,但看起来您应该在第一个表(是检查表吗?)和第二个表(用户表)之间进行两次联接,例如:

select * 
from 
   table1 t1, 
   table2 t2,
   table2 t2_b
where t1.eng_id = t2.user_id
   And t1.exam_id = t2_b.user_id;
而且,更喜欢使用更有意义的别名,如“u_工程师”或“u_检验员”

使用此SQL,您将获得t1.eng_id等于t1.exam_id的所有记录。 可能您希望获取t1.eng_id或t1.exam_id等于t2.user_id的记录。要获得此结果,请使用以下SQL:

SELECT * 
FROM table1 AS t1, table2 AS t2
WHERE t1.eng_id = t2.user_id
OR t1.exam_id = t2.user_id;

这是因为在where子句中,您要求t1.eng_id=t2.user_id t1.exam\u id=t2.user\u id,请注意,您有一个and操作,这意味着,只有当两个条件都满足时,它的字面意思是,当eng\u id和exam\u id在表t1中相同时。 而是像这样使用:

select * 
from table1 t1
left join table2 t2 on t1.eng_id = t2.user_id
left join table2 t21 on t1.exam_id = t21.user_id;

我怀疑考试id是用户id的真正外键。你能发布完整的表结构吗?编辑:此外,您的标记太多。MySQL SQL Server.if t1.eng_id=t2.user_id和t1.exam_id=t2.user_id,然后t1.eng_id=t1.exam_id通过transitivityFirst找出您正在使用的RDBMS。然后看第一原则:要回答这样一个基本问题,我们需要知道要连接的两个表的表结构。然后告诉我们你想在加入中发现什么。您可能应该解释为什么您认为t2.user\u id与t1.exam\u id和t1.eng\u id相同(因为这是您最初的查询的意思)在ANSI-92 SQL标准中(超过25年前),用正确的ANSI
JOIN
语法替换了老式的逗号分隔表列表样式,不鼓励使用它
select * 
from table1 t1
left join table2 t2 on t1.eng_id = t2.user_id
left join table2 t21 on t1.exam_id = t21.user_id;