2012-08-14 97 views
0

我知道使用UNION會刪除sql中的重複行,但我想知道如何刪除與另一行共享重複主鍵的重複行。這裏是查詢我有mysql UNION重複值

" 
SELECT 
    isbn, title, rank, 
    lowest_new_price    AS lowest_price, 
    lowest_new_location    AS lowest_location, 

    FROM ".TBL_BOOKS."   

UNION 

SELECT 
    isbn, title, rank, 
    lowest_used_price    AS lowest_price, 
    lowest_used_location   AS lowest_location, 

    FROM ".TBL_BOOKS." 


ORDER BY rank ASC" 

輸入數據

isbn, title, rank, lowest_new_price, lowest_new_location 
00001 t1  1  100     uk 
00001 t1  1  200     uk 
00002 t3  5  50     uk 

期望的輸出數據

isbn, title, rank, lowest_new_price, lowest_new_location 
00001 t1  1  100     uk 
00002 t3  5  50     uk 

isbn, title, rank, lowest_new_price, lowest_new_location 
00001 t1  1  200     uk 
00002 t3  5  50     uk 
+0

哪個應該優先考慮,新的或使用?通常,您需要提供輸入數據以及所需的輸出。否則難以幫助。 – Madbreaks 2012-08-14 21:37:33

+0

新的或已使用的,任何可以的 – 2012-08-14 21:38:03

+0

你似乎在選擇同一張桌子上的所有東西,爲什麼要打擾工會呢?爲什麼不選擇所有字段並在選擇語句中使用「CASE WHEN」? – GDF 2012-08-14 21:51:37

回答

1

我想你需要兩個查詢,一個得到這個數據到一個臨時表,第二個得到你想要的數據。如果你願意,你可以在單個查詢中完成,但會有點混亂。

首先,我們需要通過ISBN的模糊數據,根據您的查詢,但沒有訂購條款 - 然後 其次,我們需要從中得到正確的不同數據。

事情是這樣的:

select data.isbn, data.title, data.rank, min(data.lowest_price) as [Lowest Price], b.lowest_Location 
from <your_query> data inner join <your_query> b on data.isbn = b.isbn and data.lowest_price = b.lowest_price 
order by data.rank 
+0

好吧我會研究它 – 2012-08-14 22:26:11

1

如何以下

SELECT 
    isbn, title, rank, 
    lowest_new_price    AS lowest_price, 
    lowest_new_location    AS lowest_location, 

    FROM ".TBL_BOOKS." 
    WHERE lowest_new_price <= lowest_used_price 

UNION 

SELECT 
    isbn, title, rank, 
    lowest_used_price    AS lowest_price, 
    lowest_used_location   AS lowest_location, 

    FROM ".TBL_BOOKS." 
    WHERE lowest_new_price > lowest_used_price 
+0

這不是什麼即時通訊尋找,閱讀評論我離開你上面 – 2012-08-14 22:00:18