2011-11-15 85 views
0

我確定有很多方法可以做到這一點,但現在我正在努力尋找能夠在給定數據的情況下正常工作的方式。SQL刪除幫助?

我基本上有一張表,其中包含與其關聯的附加字段以及優先於其他字段的源詳細信息的重複項。所以基本上我在表中添加了一個「優先級」字段,然後根據源優先級更新。我現在需要選擇不同的記錄來填充我的「獨特」記錄表(然後我將應用唯一的關鍵約束來防止在需要的字段上再次發生這種情況!)...

所以我基本上,這樣的事情:

Select phone, carrier, src, priority 
from dbo.mytable 

所以基本上我需要拉不同的手機上優先(1,2,3,4等)的順序,基本上與它一起拉其他數據的其餘部分並保持獨特的手機。

我已經嘗試了使用子選擇與min(優先級)值相同的表中的一些東西,但結果仍然似乎沒有道理。任何幫助將不勝感激。謝謝!

編輯我需要從同一個表中重複數據刪除,但如果需要的話,我可以根據我的選擇語句來填充一個新表格,以便將唯一標識符取消。這是在MSSQL中,但想通過SQL知識的任何人都可以回答。

例如,假設我有以下行:

5556667777, ATT, source1, 1 
5556667777, ATT, source2, 2 
5556667777, ATT, source3, 3 

我需要根據優先級1率先拉開的唯一身份.....問題是,我需要從刪除任何其他受騙者該表格基於優先級順序,而不再以相同的電話號碼兩次結束。合理?

+1

我不認爲我理解你的問題。我們在這裏只討論一張桌子嗎?你想*刪除*重複的記錄,或只是爲了讓一個查詢不返回重複?無論如何,*究竟是什麼?此外,爲什麼這個標籤'[mysql]'和'[tsql]'? – NullUserException

+0

這是在MySQL還是MSSQL/Sybase? TSQL與標準SQL不同。 – jwiscarson

+0

您是否想要特定優先級的獨特電話條目?我還不太瞭解這個問題。 – mkro

回答

1

所以你說組合(電話,優先級)在現有表中是唯一的,並且你想選擇優先級最小的行?

SELECT mytable.phone, mytable.carrier, mytable.src 
    FROM mytable 
    INNER JOIN (
    SELECT phone, MIN(priority) AS minpriority 
     FROM mytable 
     GROUP BY phone 
) AS minphone 
    ON mytable.phone = minphone.phone 
    AND mytable.priority = minphone.minpriority