簡體   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