我如何'减去'sql表?

swo*_*978 26 sql t-sql sql-server sql-server-2005

它不是我正在寻找的减法.我知道它不是一个联合或交集...我已经获得了一个冗长而复杂的存储过程,它返回一个活动和非活动文档的表.我也得到了一个类似的存储过程,它返回另一个只包含活动文档的表.

如何使用这两个存储过程获取非活动文档表?

我们正在使用SQL Server 2005.

LBu*_*kin 42

您正在寻找的设置操作称为MINUS,但在SQL Server中,关键字是EXCEPT

  SELECT ... // all documents
  EXCEPT
  SELECT ... // active documents
Run Code Online (Sandbox Code Playgroud)

我相信EXCEPT集操作在SQL Server 2005中可用.


Car*_*ter 11

假设有两个表对应的唯一ID:

select * from table_both b
where not exists (select * from table_active a where a.id = b.id)
Run Code Online (Sandbox Code Playgroud)


gbn*_*gbn 8

所有好的答案,但缺少一点:提问者(OP)有存储过程......

您必须定义临时表(基于您的平台)才能加载数据

INSERT ...
EXEC getActive

INSERT ...
EXEC getInactive
Run Code Online (Sandbox Code Playgroud)

然后使用EXCEPT/EXISTS/MINUS/IN/OUTER JOIN/etc ......


Jas*_*n S 6

SELECT * FROM Table1 
LEFT JOIN Table2 on Table1.id = Table2.id
WHERE Table2.id IS NULL
Run Code Online (Sandbox Code Playgroud)

这几乎适用于任何数据库引擎