如何比较两个表?

mcdcgff0  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(307)

这是我的问题

select * from table as a 
where a.* not in 
(select * from table B)

我想知道两个表之间的区别有一个特定的函数吗?

sbtkgmzw

sbtkgmzw1#

根据定义,except通过比较两个查询的结果返回不同的行。
except返回左输入查询中不由右输入查询输出的不同行。
基本规则是:
在所有查询中,列的数目和顺序必须相同。
数据类型必须兼容。

CREATE TABLE MyTableA (ColA int, ColB int)
CREATE TABLE MyTableB (ColA int, ColB int)
INSERT INTO MyTableA (ColA, ColB) VALUES (15,1),(10,1),(2,1),(2,1),(16,1),(2,2),(3,3),(3,3)
INSERT INTO MyTableB (ColA, ColB) VALUES (1,1),(1,1),(1,1),(2,2),(4,5),(1,1),(4,5)

SELECT * FROM MyTableA
EXCEPT
SELECT * FROM MyTableB

Select *
from MyTableA as a where not exists (Select 1 from MyTableB as b
where a.ColA = b.ColA and a.ColB = b.ColB)
GO
ColA | ColB
---: | ---:
   2 |    1
   3 |    3
  10 |    1
  15 |    1
  16 |    1

ColA | ColB
---: | ---:
  15 |    1
  10 |    1
   2 |    1
   2 |    1
  16 |    1
   3 |    3
   3 |    3

db<>在这里摆弄
您可以看到,使用except生成的重复条目,如果要消除此问题,可能需要为两个表都添加一个id列,并将查询更新为:

Select *
from MyTableA as a where not exists (Select 1 from MyTableB as b
where a.ColA = b.ColA and a.ColB = b.ColB and a.ID <> b.ID)

相关问题