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

时间:2018-10-05 19:59:31

标签: sql

我试图将一个表中的两列连接到另一个表中的一列,即将div中的eng_idexam_id与{{1}中的table1 }。

user_id

此查询仅返回表1中table2select * from table1 t1, table2 t2 where t1.eng_id = t2.user_id and t1.exam_id = t2.user_id; 相似(两个ID分别为18或20)的记录,如果这两个ID不同的任何记录,我看不到记录。表1中的Eng_id和Exam_id =(等于表2中的user_id)

尽管,表中填充了eng_idexam_id不同的记录。

请您解释为什么会这样吗?这是我的结果:

enter image description here

3 个答案:

答案 0 :(得分:1)

IF t1.eng_id = t2.user_id AND t1.exam_id = t2.user_id THEN t1.eng_id = t1.exam_id;

使用此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;

答案 1 :(得分:0)

您提供的详细信息尚不清楚,但是您似乎应该在第一个表(是检查表?)和第二个表(用户表)之间进行2次联接,类似:

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_engineer”或“ u_examiner”

答案 2 :(得分:0)

之所以发生,是因为您在where子句中要求输入t1.eng_id = t2.user_id   和t1.exam_id = t2.user_id,请注意您有一个AND操作,这意味着,只有同时满足两个条件,这才意味着表t1中的eng_id和exam_id将相同。 而是这样使用:

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;