如何 select 一个 table 的记录与另外两个 table 不匹配
How to select the records from one table which is not matching with the other two tables
我有一个 master table emp1 table 有 3 列和 3 行,如下所示
empid empname empsal
1 a 100
2 b 300
3 c 500
second table emp2 with 3 columns and 1 row
empid empname empsal
1 a 100
假设,如果我必须选择仅在第一个 table 中可用但在第二个 table 中不可用的记录,那么我可以使用以下查询
select * FROM emp1 b
LEFT JOIN emp2 f ON f.empid = b.empid
WHERE f.id IS NULL
但这里我有第三个 table emp3,有 3 列和 1 行
empid empname empsal
2 b 300
如果我必须选择仅在第一个 table 中可用的记录,而不在第二个和第三个 table 中可用的记录,最好的解决方案是什么?
有很多方法可以做到,这里是使用 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 |
+-------+---------+--------+
我有一个 master table emp1 table 有 3 列和 3 行,如下所示
empid empname empsal
1 a 100
2 b 300
3 c 500
second table emp2 with 3 columns and 1 row
empid empname empsal
1 a 100
假设,如果我必须选择仅在第一个 table 中可用但在第二个 table 中不可用的记录,那么我可以使用以下查询
select * FROM emp1 b
LEFT JOIN emp2 f ON f.empid = b.empid
WHERE f.id IS NULL
但这里我有第三个 table emp3,有 3 列和 1 行
empid empname empsal
2 b 300
如果我必须选择仅在第一个 table 中可用的记录,而不在第二个和第三个 table 中可用的记录,最好的解决方案是什么?
有很多方法可以做到,这里是使用 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 |
+-------+---------+--------+