更新 - 好的三个答案都有意义,我将尝试各自,因为我很好奇,如果有性能+/-但我不确定我有足够的测试数据在我的表格中确定。
我正在尝试查看表A并搜索表B或表C中是否存在用户,以便找到表A中的任何人,而其他两个表中至少有一个表不存在(他们没有需要存在于两者中,只有B或C)
这样的事情,但不必在下面几乎相同的陈述
SELECT emp_id
FROM
tableA
LEFT JOIN
TableB
ON
tableA.emp_id = tableB.emp_id
WHERE
TableA.emp_id IS NULL
SELECT emp_id
FROM
tableA
LEFT JOIN
TableC
ON
tableA.emp_id = tableC.emp_id
WHERE
TableA.emp_id IS NULL
Table A
+---------+--------+-----------+
| Emp_ID | Status | hire_date |
+---------+--------+-----------+
| 12345 | happy | 10/10/2005|
| 54321 | sad | 12/01/2009|
+---------+--------+-----------+
Table B
+---------+--------+
| Emp_ID | Weight |
+---------+--------+
| 12345 | 185 |
| 54321 | 150 |
+---------+--------+
Table C
+---------+--------+
| Emp_ID | City |
+---------+--------+
| 12345 | Chicago|
| 54321 | Atlanta|
+---------+--------+
感谢您的任何建议!
答案 0 :(得分:2)
您可以在一个查询中加入所有表格。
SELECT a.Emp_ID -- a.* <<== if you want to include all columns
FROM tbA a
LEFT JOIN tbB b
ON a.Emp_ID = b.Emp_ID
LEFT JOIN tbC c
ON a.Emp_ID = c.Emp_ID
WHERE b.Emp_ID IS NULL
AND c.Emp_ID IS NULL -- <<== AND should be use here
答案 1 :(得分:1)
为什么不使用not in
表达查询?
SELECT emp_id
FROM tableA
WHERE emp_id not in (select emp_id from TableB) and
emp_id not in (select emp_id from TableC);
答案 2 :(得分:1)
你可以加入3表,如下所示
Select emp_id from table1 a left join table2 b on a.emp_id=b.emp_id
left join table3 c on c.emp_id=a.emp_id
答案 3 :(得分:1)
您的查询无法正常工作,因为您有一个WHERE tableA.emp_id IS NULL,并且TableA是您要测试的emp_id,您应该使用TableB.eemp_id IS NULL
和TableC.emp_id IS NULL
进行第二次测试查询。
由于您需要至少在tableB或tableC中不存在的行,因此可以对tableB和tableC执行LEFT JOIN并测试这些表中的至少一个emp_id是否为空且带有 OR < /强>
SELECT emp_id
FROM tableA
LEFT JOIN TableB ON tableA.emp_id = tableB.emp_id
LEFT JOIN TableC ON tableA.emp_id = tableC.emp_id
WHERE
TableB.emp_id IS NULL
OR TableC.emp_id IS NULL