簡體   English   中英

來自多個表的SQL查詢結果,沒有重復項

[英]SQL query result from multiple tables without duplicates

我有一些表格,這些表格從所有記錄的客戶ID,最后訂單日期和該訂單總計$,細分名稱中過濾掉。 每個過濾器基於不同的條件,但是,相同的客戶ID可以屬於兩個不同的表,兩個不同的細分。 相同的ID在“最后順序”中將具有不同的值,而在中將具有“總計” 段,表名是A,B,C,D。

我需要對所有分段表中的記錄進行分組,以確保該組中沒有重復的ID。 即:如果一個ID出現在多個表中(例如ID 2在表A和B中),則結果集必須顯示來自第一個表A的ID列。

因此,我需要列出段A表中的所有記錄及其列值,段B表中的所有記錄及其值的列表,除非段B表中的任何ID在段A中以及段的所有記錄的列表中C表,除非來自段C的ID位於段A或B表中。 我希望這確實有意義。

我聽起來像是70-461考試中的一個問題:D我已經對它進行了徹底的研究,但也許我不知道該怎么問。 我想知道是否有人會想到如何構建查詢以獲得該結果。 非常感謝您的任何建議。

多謝你們。 我似乎無法發布屏幕截圖。 讓我嘗試通過html鍵入它。 細分受眾群表數量更多,但只需鍵入兩個就可以給您一個想法。 多謝你們!

Segment A
----------------------------------------
ID | Last Order Date  | Total  | Segment     
----------------------------------------
1  | 01/01/2012       | $1     |  A         
----------------------------------------
2  | 01/01/2012       | $1     |  A     
----------------------------------------              
3  | 01/01/2012       | $5     |  A     
----------------------------------------                 
6  | 01/01/2012       | $7     |  A     
----------------------------------------                 
8  | 01/01/2012       | $8     |  A  


Segment B

ID | Last Order Date | Total | Segment     
--------------------------------------
4  | 01/01/2010      | $3    |  B        
--------------------------------------
2  | 01/01/2010      | $5    |  B     
--------------------------------------            
1  | 01/01/2010      | $2    |  B     
--------------------------------------                
3  | 01/01/2010      | $1    |  B     
--------------------------------------                
5  | 01/01/2010      | $7    |  B  



Result Set

ID | Last Order Date | Total | Segment
--------------------------------------     
1  |    01/01/2012   |  $1   |    A         
--------------------------------------
2  |    01/01/2012   |  $1   |    A   
--------------------------------------                
3  |    01/01/2012   |  $5   |    A   
--------------------------------------                  
4  |    01/01/2010   |  $3   |    B   
--------------------------------------      
5  |    01/01/2010   |  $7   |    B  

以下是一些入門知識:

SELECT ID, LastOrderDate, Total, Segment
FROM SegmentA

UNION ALL
SELECT ID, LastOrderDate, Total, Segment
FROM SegmentB
WHERE ID NOT IN (SELECT ID FROM SegmentA)

UNION ALL
SELECT ID, LastOrderDate, Total, Segment
FROM SegmentC
WHERE ID NOT IN (SELECT ID FROM SegmentA)
AND ID NOT IN (SELECT ID FROM SegmentB)

UNION ALL
SELECT ID, LastOrderDate, Total, Segment
FROM SegmentD
WHERE ID NOT IN (SELECT ID FROM SegmentA)
AND ID NOT IN (SELECT ID FROM SegmentB)
AND ID NOT IN (SELECT ID FROM SegmentC)

一個非常簡單的答案,如果您要優化此信息,則需要更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM