我有一个主表emp1表,其中包含3列和3行,如下所示
empid empname empsal
1 a 100
2 b 300
3 c 500
第二个表emp2,包含3列和1行
empid empname empsal
1 a 100
假设,如果我必须选择仅在第一个表中可用而不在第二个表中的记录,那么我可以使用以下查询
select * FROM emp1 b
LEFT JOIN emp2 f ON f.empid = b.empid
WHERE f.id IS NULL
但在这里我有第三个表emp3,有3列和1行
empid empname empsal
2 b 300
如果我必须选择第一张表中可用的记录,而不是第二张和第三张表中的记录,那么最佳解决方案是什么?
答案 0 :(得分:0)
有很多方法可以做到这一点,这里有一个使用NOT IN
:
CREATE TABLE Emp1 (
empid INT,
empname VARCHAR(25),
empsal INT
);
CREATE TABLE Emp2 (
empid INT,
empname VARCHAR(25),
empsal INT
);
CREATE TABLE Emp3 (
empid INT,
empname VARCHAR(25),
empsal INT
);
INSERT INTO Emp1 VALUES
(1, 'a', 100),
(2, 'b', 300),
(3, 'c', 500);
INSERT INTO Emp2 VALUES
(1, 'a', 100);
INSERT INTO Emp3 VALUES
(2, 'b', 300);
SELECT *
FROM Emp1
WHERE empid NOT IN ( SELECT empid FROM Emp2 UNION SELECT empid FROM Emp3);
结果:
+-------+---------+--------+
| empid | empname | empsal |
+-------+---------+--------+
| 3 | c | 500 |
+-------+---------+--------+
<强> Demo 强>