簡體   English   中英

使用具有 null 值的列從表中刪除

[英]Delete from table using columns with null values Snowflake

我有一個自動過程來根據表的已定義主鍵進行增量插入。 在一些表中,主鍵有 null 值,我們無法從根本上解決它,所以我們必須處理它。

獲得表的主鍵后,我們運行查詢以刪除記錄,如下所示:

DELETE FROM table
USING stg_table
WHERE table.pk_1 = stg_table.pk_1 AND table.pk_2 = stg_table.pk_2

除非 pk_1 或pk_2中的某個值為pk_1 ,否則此方法有效。 我已執行以下操作來解決它:

DELETE FROM table
USING stg_table
WHERE NVL(table.pk_1, 'null') = NVL(stg_table.pk_1, 'null')

但是,這僅在pk_1VARCHAR時才有效,否則它將失敗。

我可以修改我的自動化腳本並獲取每列的類型,並根據該類型將不同的值傳遞給 NVL function,但我想知道是否有任何方法可以僅使用 Snowflake 正確實現刪除。

如果您希望NULL值匹配,您可以使用:

DELETE FROM table
USING stg_table
WHERE (table.pk_1 = stg_table.pk_1 OR table.pk_1 IS NULL AND stg_table.pk_1 IS NULL) AND
      (table.pk_2 = stg_table.pk_2 OR table.pk_2 IS NULL AND stg_table.pk_2 IS NULL)

或者,使用EQUAL_NULL() ,Snowflake 的 NULL 安全比較運算符:

DELETE FROM table
USING stg_table
WHERE EQUAL_NULL(table.pk_1, stg_table.pk_1) AND
      EQUAL_NULL(table.pk_2, stg_table.pk_2);

綜上所述,主鍵永遠不是NULL根據 SQL 的定義。 並且很少會創建兩個不同表中的NULL值應該匹配的數據庫。

IS DISTINCT FROM是空安全運算符,它允許比較元組:

DELETE FROM table
USING stg_table
WHERE (table.pk_1,table.pk_2) IS NOT DISTINCT FROM (stg_table.pk_1, stg_table.pk_2);

暫無
暫無

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

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