2009-11-19 83 views
2

我有一張表,其中有太多列和幾百萬行,我需要查詢差異。選擇在SQL中不同的行

在這些行上,希望只有一列是不同的,並且應該是自動遞增的ID字段。

我需要做的是檢查這些行是否實際上是相同的,並且如果在任何字段中有任何差異。例如,如果「Name」列應該是「Peter,Paul和Mary」,並且「Order#」列應該是「132」,那麼我需要找到那些值不爲「但我需要爲表中的每一列找到它我真的不知道什麼是正確的值(這意味着我不能只是創建一個「SELECT ... WHERE Name ='This'」爲每列)。

那麼如何找到不同的行呢? (使用直接SQL,無需編程)

+0

我想你有另一張表,有數百萬行正確的數據,對不對? – 2009-11-19 16:38:37

+0

那麼如果你不知道什麼是正確的,你怎麼知道數據是錯誤的?算法會非常有用。 – 2009-11-19 16:42:55

+0

「正確」的值是最常見的東西。我可以通過查看結果來弄清楚什麼是正確的值,問題是我不想查看數百萬條記錄,我只是想看看不同的記錄是什麼,以便我可以看到它們爲什麼不同因此明白他們爲什麼是「錯誤的」。 – 2009-11-19 16:46:33

回答

1

你會覺得這個答案是你在找什麼,並會幫助你?這裏有一個Link來找到合適的sql查詢。

1

如果您知道錯誤結果的限制(例如說10),那麼您可以對它們進行排序並獲得前11個結果。你知道我要去哪裏,對嗎?

我沒有專業知識的SQL任何雖然:)

1

你需要以編程方式做到這一點,或者你可以運行一些查詢自己的檢查嗎?

如果後者,我只是做「選擇不同的名稱,命令#」開始。這應該返回一個列表,其中包括「彼得保羅和瑪麗,132」,可能還有其他一些東西。

然後按照你的建議,通過做select ... where name =「this」來找到其他的東西。

您可以通過「按名稱,順序#」從...組中選擇不同的名稱,順序號,計數(*)來獲得更多的信息。這會給你一個值的列表和一組給定值的頻率。

1

如果我理解正確,(你的問題對我來說不是100%清楚),你試着找到不必要的重複行?如果是這樣,請嘗試以下SQL查詢:

Select A.Id, B.Id 
From Table A 
    Join Table B  
    On A.Id <> B.Id 
     And A.ColA = B.ColA 
     And A.ColB = B.Col 
     And A.ColC = B.ColC 
     ... 

或者

Select ColA, ColB, etc. 
From Table 
Group By ColA, ColB, etc. 
Having Count(*) > 1  
1

如果你有兩個「獨立」列之間的相關性,那麼列B只有一個「正確」的值,只要列A是給定值,那麼你的數據庫設計就會破壞,因爲這些相關性應該是作爲一個單獨的表格考慮在內。

1

試試這個:

SELECT Name, OrderNum 
FROM Orders T1 
FULL OUTER JOIN (
    SELECT Name, OrderNum 
    FROM Orders 
    GROUP BY Name, OrderNum 
    HAVING COUNT(*) > 1) T2 
    ON T1.Name = T2.Name 
     AND T1.OrderNum = T2.OrderNum 

嵌套查詢被識別重複的,所以你需要針對您共同領域,FULL OUTER JOIN從結果集中排除重複。所以基本上,你自己加入表格來識別重複項並從結果中排除它們。如果你想只有重複,然後更改FULL OUTER JOIN只是JOIN