2013-03-13 57 views
6

這是我的工作表:如何編寫SQL查詢以識別特定字段中的重複值?

The table

我想僅標識有不同的參數重複扣除ID的ReviewIDs。

例如,在上圖中,ReviewID 114有兩個不同的參數ID,但兩個記錄都有相同的扣減ID。

對於我而言,此記錄(ReviewID 114)有錯誤。對於單個ReviewID,不應有兩個或更多具有相同扣除ID的唯一參數ID。

我想寫一個查詢來識別這些類型的記錄,但我的SQL技能還沒有。幫幫我?

謝謝!

更新1:我使用TSQL(SQL Server 2008中),如果這能幫助
更新2:我正在尋找的輸出是一樣上圖中,減去任何記載,不符合我所描述的標準。

乾杯!

+1

所以,該圖像中,這兩個114記錄應當存在,以及REVIEW_ID 124的5個實例? – Ellesedil 2013-03-13 00:51:38

+0

@Ellesedil這是正確的,該表中的記錄13和14顯示兩個具有相同扣除ID的不同參數ID,因此這將是我想要捕獲的Review ID之一。 – jblue 2013-03-13 00:57:05

回答

6
SELECT * FROM table t1 INNER JOIN (
    SELECT review_id, deduction_id FROM table 
    GROUP BY review_id, deduction_id 
    HAVING COUNT(parameter_id) > 1 
) t2 ON t1.review_id = t2.review_id AND t1.deduction_id = t2.deduction_id; 

http://www.sqlfiddle.com/#!3/d858f/3

如果能夠有確切的重複,這是好的,你可以修改HAVING子句COUNT(DISTINCT parameter_id)。

+0

此答案提供正確的結果。我結束了使用通過邁克爾大號建議的CTE,因爲在圖像中的表是的結果還有另外一個查詢,但是這個答案讓我找到了我想要的東西,非常感謝! – jblue 2013-03-13 02:28:25

6
Select ReviewID, deduction_ID from Table 
Group By ReviewID, deduction_ID 
Having count(ReviewID) > 1 

http://www.sqlfiddle.com/#!3/6e113/3有一個例子

+0

這沒有考慮到parameter_id,這是確定review_id是否有錯誤所必需的。 – Ellesedil 2013-03-13 00:45:33

+0

如果你所做的'有計數(DISTINCT ReviewID)> 1'然後如果有兩個不同的reviewId(而不僅僅是同一多次,你就會知道。 – 2013-03-13 01:01:46

+0

@Ellesedil,正確,參數ID需要被考慮帳戶,每個扣ID是唯一的,並且可僅適用於單個參數(ID)。 – jblue 2013-03-13 01:02:43

3

如果我理解的標準:對於ReviewIDdeduction_id每個組合只能有一個parameter_id並且要產生一個結果沒有是打破這些規則的ReviewIDs(而不是識別那些做行)查詢。這將做到這一點:

;WITH review_errors AS (
    SELECT ReviewID 
    FROM test 
    GROUP BY ReviewID,deduction_ID 
    HAVING COUNT(DISTINCT parameter_id) > 1 
) 
SELECT t.* 
FROM test t 
    LEFT JOIN review_errors r 
    ON t.ReviewID = r.ReviewID 
WHERE r.ReviewID IS NULL 

爲了解釋:review_errorscommon table expression(認爲它是一個命名的子查詢,不弄亂主查詢)。它選擇違反標準的ReviewID。當你離開join時,它會從左表中選擇所有行,而不管它們是否與右表匹配,並且只匹配右表中與左表匹配的行。不匹配的行將在右側表的列中有空值。通過指定WHERE r.ReviewID IS NULL可以消除左手錶中與右手錶匹配的行。

SQL Fiddle

+0

我認爲你已經倒退了,因爲OP表示他想識別記錄,例如review_id 114,這是一個無效的記錄。你寫的邏輯,你排除了review_id的所有實例,即使它有一些「好」的記錄。 – Ellesedil 2013-03-13 01:32:52

+0

公平 - 我可能誤解了。這是一個微不足道的修改,[h ere的SQL小提琴](http://www.sqlfiddle.com/#!3/4dc10/2) – 2013-03-13 01:38:15

+0

您也必須加入deduction_id。否則,您可能會從review_id中選擇具有不良記錄的好記錄。不過,我喜歡CTE。 – Ellesedil 2013-03-13 01:41:12

相關問題