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)
所有好的答案,但缺少一点:提问者(OP)有存储过程......
您必须定义临时表(基于您的平台)才能加载数据
INSERT ...
EXEC getActive
INSERT ...
EXEC getInactive
Run Code Online (Sandbox Code Playgroud)
然后使用EXCEPT/EXISTS/MINUS/IN/OUTER JOIN/etc ......
SELECT * FROM Table1
LEFT JOIN Table2 on Table1.id = Table2.id
WHERE Table2.id IS NULL
Run Code Online (Sandbox Code Playgroud)
这几乎适用于任何数据库引擎