展开全部
你的代码好长啊, 我就简单解释一下
MySQL 不支持 EXCEPT, 但是可以有替代的办法。
-- 测试表,与测试数据
CREATE TABLE union_tab_1 (
id INT,
val VARCHAR(10)
);
CREATE TABLE union_tab_2 (
id INT,
val VARCHAR(10)
);
INSERT INTO union_tab_1 VALUES(1, 'A');
INSERT INTO union_tab_1 VALUES(2, 'B');
INSERT INTO union_tab_1 VALUES(3, 'C');
INSERT INTO union_tab_2 VALUES(1, 'A');
INSERT INTO union_tab_2 VALUES(1, 'A');
INSERT INTO union_tab_2 VALUES(2, 'B');
INSERT INTO union_tab_2 VALUES(4, 'D');
EXCEPT– 返回第一个表中有e69da5e6ba903231313335323631343130323136353331333332613739、第二个表中没有的数据
SQL Server 是支持的
1> SELECT * FROM union_tab_1
2> EXCEPT
3> SELECT * FROM union_tab_2;
4> go
id val
----------- ----------
3 C
(1 行受影响)
1> SELECT * FROM union_tab_2
2> EXCEPT
3> SELECT * FROM union_tab_1;
4> go
id val
----------- ----------
4 D
(1 行受影响)
MySQL 不支持
实现相同功能的 SQL 如下:
SELECT
DISTINCT union_tab_1.*
FROM
union_tab_1 LEFT JOIN union_tab_2
ON (union_tab_1.id = union_tab_2.id
AND union_tab_1.val = union_tab_2.val)
WHERE
union_tab_2.id IS NULL;
+------+------+
| id | val |
+------+------+
| 3 | C |
+------+------+
1 row in set (0.00 sec)