我试图将一个表中的两列连接到另一个表中的一列,即将div
中的eng_id
和exam_id
与{{1}中的table1
}。
user_id
此查询仅返回表1中table2
和select *
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_id
和exam_id
不同的记录。
请您解释为什么会这样吗?这是我的结果:
答案 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;