2011-05-10 58 views
1
從數據庫中獲取一個共同的價值

enter image description here如何使用UNION

2項記錄在上面的圖像是從數據庫,在上述表約束的(SID和LINE_ITEM_ID), SID和LINE_ITEM_ID兩列被用來尋找一個獨特的記錄。

我的問題: 我找了一個查詢就應該根據情況 如果我搜索獲取從DB的PART_NUMBER條記錄=「PAU43-IMB-P6」 1.應該從DB如果搜索獲取一個記錄對於PART_NUMBER ='PAU43-IMB-P6',如果在SID = 1或SID = 2下只有一個記錄,則無論該項屬於哪個SID。 2)它應該獲取SID = 2下的一個記錄只有從DB上搜索PART_NUMBER ='PAU43-IMB-P6'時,如果在SID = 1中有兩個項目,其他的在SID = 2中。

我正在尋找一個查詢,它將根據SID 1和2來搜索給定的part_number,並且它應該在SID = 2下返回值,並且只有在沒有記錄時才能返回SID = 1下的值在SID = 2下(查詢必須承受百萬記錄搜索的負載)。

謝謝

+0

爲什麼要用'UNION'?家庭作業? – onedaywhen 2011-05-10 06:20:48

+0

,因爲我需要從2或3中獲得1條記錄,UNION只在所有檢索列的值相同的情況下工作。但是,如果任一列值不同,它會將該記錄視爲不同的記錄,即使其餘的列值是相似的.... – Warrior 2011-05-10 06:41:24

回答

0

那麼在我的情況下,它的工作是這樣的:

select LINE_ITEM_ID,SID,price_1,part_number from (
(select LINE_ITEM_ID,SID,price_1,part_number from Table where SID = 2) 
UNION 
(select LINE_ITEM_ID,SID,price_1,part_number from Table SID = 1 and line_item_id NOT IN (select LINE_ITEM_ID,SID,price_1,part_number from Table SID = 2))) 

這個查詢解決了我的問題..........

0
Select * 
    from Table 
where SID||LINE_ITEM_ID = (
          select Max(SID)||Max(LINE_ITEM_ID) 
           from table 
          where PART_NUMBER = 'PAU43-IMB-P6' 
          ); 
0

如果我理解正確的話,對於每一個被認爲LINE_ITEM_ID你想只返回一個與SID最大價值。這是一個常見的要求,並且與SQL中的大部分內容一樣,可以用許多不同的方式編寫;最佳性能取決於許多因素,其中最重要的是您使用的SQL產品。

這裏是一個可能的辦法:

SELECT DISTINCT * -- use a column list 
    FROM YourTable AS T1 
     INNER JOIN (
        SELECT T2.LINE_ITEM_ID, 
          MAX(T2.SID) AS max_SID 
        FROM YourTable AS T2 
        GROUP 
         BY T2.LINE_ITEM_ID 
       ) AS DT1 (LINE_ITEM_ID, max_SID) 
      ON T1.LINE_ITEM_ID = DT1.LINE_ITEM_ID 
      AND T1.SID = DT1.max_SID; 

這麼說,我不記得看到一個依靠UNION關係運算符。你可以用INTERSECT關係運算符輕鬆地重寫上面的內容,但它會更詳細。