在沒有唯一鍵的情況下消除 Netezza 中的重複行
大型表格中的重複資料會影響儲存和資料品質。 刪除這些沒有唯一標識符的重複項是一個挑戰。雖然使用行號(在標準 SQL 中常見)等技術並不直接適用於 Netezza,但有一種高效的替代方法。
Netezza 方法:利用 DELETE
指令
Netezza 在 USING
語句中使用 DELETE
關鍵字提供了強大的解決方案。 考慮這個例子:
<code class="language-sql">DELETE FROM table_with_dups T1 USING table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.column1 = T2.column1 AND T1.column2 = T2.column2 -- ... add more columns as needed ...</code>
此查詢將 table_with_dups
中的每一行 (T1) 與所有其他行 (T2) 進行比較。 它根據 ctid
(行 ID)值識別並刪除舊的重複行。 AND
條件確保只有在指定列中具有相同值的行才被視為重複。
刪除前預覽
要在執行 DELETE
命令之前查看計劃刪除的行,請將 DELETE
替換為 SELECT *
,並將 USING
關鍵字替換為逗號:
<code class="language-sql">SELECT * FROM table_with_dups T1, table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.column1 = T2.column1 AND T1.column2 = T2.column2 -- ... add more columns as needed ...</code>
效能最佳化
為了獲得最佳效能,請避免使用 NOT IN
子句,它會因子查詢開銷而顯著減慢進程。 這裡示範的 USING
方法在大多數情況下都能提供卓越的速度。
處理 NULL 值
如果任何鍵列包含 NULL
值,請在 COALESCE()
子句中使用 WHERE
函數以確保準確比較:
<code class="language-sql"> AND COALESCE(T1.col_with_nulls, '[NULL]') = COALESCE(T2.col_with_nulls, '[NULL]') ``` This treats `NULL` values consistently. Replace `col_with_nulls` with the actual column name. Remember to adjust the column list in the `WHERE` clause to include all relevant columns for duplicate identification.</code>
以上是如何在沒有唯一識別碼的情況下有效刪除 Netezza 中的重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!