簡體   English   中英

復雜記錄比較刪除重復項

[英]Complex record comparison removing duplicates

我試圖比較同一張表中的記錄,所以我要通過字段ID,X,Y和Z選擇記錄,並在X,Y和/或Z相等的情況下匹配它們。 為了進行比較,我將表與其自身連接在一起,然后將每個記錄與其他記錄進行比較

我的問題是,如果我有一個與字段Z上的其他10個記錄BK匹配的記錄A,它將在表的第二個實例中找到它們的同時列出每個記錄BK,以及它在第一個實例中找到的A的桌子。 然后,當在表的第一個實例中找到每個BK時,它將再次列出每個匹配的記錄。 在這種情況下,在字段Z上有11條記錄匹配,並且由於搜索的性質,我正在接收121行。 我希望能夠將重復項標記為一對記錄,而不管它們是如何配對的。

結果可能在字段Z上列為A和C匹配。然后我希望它識別出C和A作為匹配是A和C作為匹配的重復。

我正在使用以下代碼進行查詢

SELECT T1.ID AS ID1,
   T2.ID AS ID2,
   T1.X AS X1,
   T2.X AS X2,
   T1.Y AS Y1,
   T2.Y AS Y2,
   T1.Z AS Z1,
   T2.Z AS Z2
FROM (SELECT ID,
           X,
           Y,
           Z
      FROM TABLE) T1
   JOIN (SELECT ID,
                X,
                Y,
                Z
           FROM TABLE) T2
      ON    (   T1.X = T2.X
             OR T1.Y = T2.Y
             OR T1.Z = T2.Z)
         AND T1.ID <> T2.ID;

要使每對僅出現一次,您可以嘗試將最后一行更改為

         AND T1.ID < T2.ID;

您可能要使用exist()。

select < some columns >
  from table x as x1
 where exists (select 1
          from table x as x2
         where (x1.x = x2.x or x1.y = x2.y or x1.z = x2.z)
           and x1.id <> x2.id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM