繁体   English   中英

T-SQL联合,但不使用临时表从基于另一个表的结果中排除结果?

[英]T-SQL Union, but exclude results from one table based on another without using a temp table?

我正在寻找两个选择语句的UNION,但是要使第二个选择排除某些结果,如果第一个选择包含某些记录而不使用临时表

我正在尝试实现以下目标:

select customernumber, name into #tempCustomer1 from customers1

select customernumber, name from #tempCustomer1 
UNION
select customernumber, name from customers2 
where customernumber not in (select customernumber from #tempCustomer1)

order by customernumber

没有临时表,是否可以这样做?

尚不清楚您想要的最终结果是什么,但要回答您的问题, 是否可以在没有临时表的情况下进行此操作? 是的,您可以这样做:

select customernumber, name from customers1
UNION
(
select customernumber, name from customers2 
where customernumber not in (select customernumber from customers1)
) 
order by customernumber

这将返回由customers1和customers2中的行组成的集合,其中customers1 id已从customers2中删除,我想这就是您想要的。

如果要摆脱重复的行,这是由UNION完成的,因为您没有向其添加ALL选项。

使用此测试设置:

declare @customers1 table (customernumber int, name char)
declare @customers2 table (customernumber int, name char)

insert @customers1 values (1,'a'),(2,'b')
insert @customers2 values (3,'d'),(4,'e'),(1,'f')

select customernumber, name from @customers1 
UNION
(
select customernumber, name from @customers2 
where customernumber not in (select customernumber from @customers1)
) 
order by customernumber

输出为:

customernumber  name
1   a
2   b
3   d
4   e

您对UNION查询应该完全按照您的要求进行,因为Union会丢弃结果集中的重复行。 所以,你可以说

select customernumber, name from customers1

UNION

select customernumber, name from customers2

根据您的评论,您可以使用内联查询来实现相同目的,而无需使用临时表,例如

SELECT * FROM
(
select customernumber, name from customers1

UNION

select customernumber, name from customers2
) tab
WHERE customernumber NOT IN (select customernumber from customers1)
ORDER BY customernumber  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM