[英]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_1
為VARCHAR
時才有效,否則它將失敗。
我可以修改我的自動化腳本並獲取每列的類型,並根據該類型將不同的值傳遞給 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.