2011-11-11 64 views
1

我們有一個表格,其結構如下 - 表(id,key_type,key_value)其中(id,key_type)是主鍵。關於應用程序T-SQL連接的查詢

由於寫入此表的軟件中存在一些錯誤,因此可能會出現(key_type,key_value)組合不同但id相同的情況。

我們想找出所有這些不正確的數據,其中(key_type,key_value)的所有組合都是相同的,即使id可以不同。

有趣的是,這些組合的數量會有所不同,即它們在所有ID中都不相同。

例如,

如果行是 -

  1. (1,TYPE1,值1)
  2. (1,2型,值2)
  3. (2,TYPE1,值1)
  4. (2,2型,值2)
  5. (3,3型,值3)
  6. (4,TYPE4,值4)
  7. (5,TYPE3,值3)
  8. (6,TYPE1,值1)
  9. (6,3型,值3)

查詢應標誌OFF的id(1 & 2)和(3 & 5) 也許解決方案是微不足道的,但我會把它歸咎於我對SQL的一點經驗。 有人可以幫我在這裏,謝謝!

+0

您應計算標記的ID不正確,或者您錯誤地指出了問題。第4行復制第2行,第7行復制第5/9行,第8行復制第1/3行,第9行復制第7/5行。爲什麼你不希望行4,7,8,9被標記? – Andrew

回答

0
SELECT count(*), key_type, key_value 
FROM YourTable 
GROUP BY key_type, key_value 
HAVING count(*) > 1 

這會給你鑰匙的類型和值,你必須重複或一式三份等

如果你再想要的ID,以及,你可以子查詢可以得到如存在withing設定的行復制

SELECT ID, key_type, key_value 
FROM YourTable y 
INNER JOIN 
( 
    SELECT count(*), key_type, key_value 
    FROM YourTable 
    GROUP BY key_type, key_value 
    HAVING count(*) > 1 
) dup ON y.key_value = dup.key_value and y.key_type = dup.key_type 
+0

我想找出其中(key_type,key_value)的所有組合都相同的id,但是此查詢將返回所有即使只有一個組合也相同的id。 – kshitij

+0

仔細檢查一下,具有子句的條款是否需要高於1,例如重複。 – Andrew

+0

對於帖子中的給定行,查詢返回了我 - 1,2,3,5,6。如果你看到(1,2)和6有一行(key_type和key_value)不同。查詢仍然返回6.我需要返回所有組合重複的ID。謝謝! – kshitij

0
SELECT distinct id 
from T1 t 
inner join (
    SELECT key_type, key_value 
    FROM T1 
    GROUP BY key_type, key_value 
    HAVING count(distinct id) > 1 
) td on t.key_type = td.key_type and t.key_value = td.key_value 

輸出:

id 
----------- 
1 
2 
3 
5 
+0

對於帖子中的給定行,查詢返回我 - 1,2,3,5,6。如果你看到(1,2)和6有一行(key_type和key_value)不同。查詢仍然返回6.我需要返回所有組合重複的ID。謝謝! – kshitij

+0

您在我的回覆後編輯了您的數據。 – RedFilter

0

我可以告訴你你的錯誤在哪裏,並且在主鍵上。你有一個自動編號(id)與key_type相結合。這將始終允許key_type/key_value的重複值,因爲id始終是唯一的並且是密鑰的一部分。

通過使key_type和key_value成爲主鍵並刪除id,您將爲此節省自己的痛苦。否則,請使用唯一主鍵