gpt4 book ai didi

mysql - SQLite 查找两个表之间的差异

转载 作者:行者123 更新时间:2023-11-29 01:57:18 25 4
gpt4 key购买 nike

我有两个表,它们都包含 id(主键)contact_idname。我想找出两个表之间的差异。因此,如果 表 A 中的一条记录与 表 B 不同,则 sql 查询应该找到它。例如,在下面的代码中,('2','test2') 没有出现在表 B 中。因此,记录 ('2','test2') 是两个表之间的差异。但是,我们可能会遇到相反的情况,例如一条记录出现在 table B 而不是 table A。或者记录的 contact_id 在两个表中可以相同,但 name 字段可以不同。在这种情况下,还应返回不同的记录。我已经这样做了,但它似乎并不适用于所有情况。如何让它适用于所有情况?

CREATE TABLE A 
(
id int auto_increment primary key,
contact_id int(20),
name varchar(20)
);

CREATE TABLE B
(
id int auto_increment primary key,
contact_id int(20),
name varchar(20)
);

INSERT INTO A
(contact_id,name)
VALUES
('1','test1'),
('2','test2');

INSERT INTO B
(contact_id,name)
VALUES
('1','test1');

查询:

SELECT * FROM A
EXCEPT
SELECT * FROM B
UNION ALL
SELECT * FROM B
EXCEPT
SELECT * FROM A

这是 sqlfiddle: http://sqlfiddle.com/#!5/f7f45/9并在弹出的画面中选择取消。

最佳答案

EXCEPT 的绑定(bind)并不比 UNION ALL 强(并且缩进查询不会改变这一点),因此数据库将在第二个 EXCEPT 之前执行 UNION ALL。

您必须将两个 EXCEPT 查询移动到子查询中以确保最后执行 UNION ALL:

SELECT * FROM (SELECT * FROM A
EXCEPT
SELECT * FROM B)
UNION ALL
SELECT * FROM (SELECT * FROM B
EXCEPT
SELECT * FROM A)

关于mysql - SQLite 查找两个表之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25296309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com