我对我的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;