【问题标题】:How to compare between two tables?如何比较两个表?
【发布时间】:2020-05-26 10:51:50
【问题描述】:

这是我的查询

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

我想有两个表之间的差异有一个特定的功能?

【问题讨论】:

  • 你可能在EXCEPT之后。样本数据和预期结果将帮助我们在这里为您提供帮助。 A* NOT IN (SELECT *... 没有任何意义;您需要比较 WHERE 中的标量值

标签: sql tsql sql-server-2017


【解决方案1】:

根据定义,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
科尔A | ColB ---: | ---: 2 | 1 3 | 3 10 | 1 15 | 1 16 | 1 科尔A | ColB ---: | ---: 15 | 1 10 | 1 2 | 1 2 | 1 16 | 1 3 | 3 3 | 3

db小提琴here

您可以看到使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多