【问题标题】:DELETE FROM + LEFT JOIN SNOWFLAKEDELETE FROM + LEFT JOIN SNOWFLAKE
【发布时间】:2021-10-05 13:50:42
【问题描述】:

我正在尝试使用 delete 从表中删除行。

delete a
from "table1" as a
LEFT JOIN "table2" AS b 
on a."x" = b."x" 
where b."X" = 'X'

但我得到的都是

SQL 编译错误:位置 7 的第 1 行语法错误意外“a”。位置 0 处出现语法错误第 3 行意外的“LEFT”。

你能帮帮我吗?

【问题讨论】:

标签: sql snowflake-cloud-data-platform


【解决方案1】:

这是雪花中正确的语法:

delete from "table1" as a
USING "table2" as b 
WHERE a."x" = b."x" 
  and b."X" = 'X'

【讨论】:

  • 我得到“删除的行数”0
【解决方案2】:

使用WHERE 并引用外部表中的特定值有效地使LEFT JOIN 成为INNER JOIN

SELECT * -- DELETE a
FROM "table1" as a
LEFT JOIN "table2" AS b 
ON a."x" = b."x" 
WHERE b."X" = 'X';

行为相同:

SELECT *  -- DELETE a
FROM "table1" as a
INNER JOIN "table2" AS b 
ON a."x" = b."x" 
WHERE b."X" = 'X';

根据需求,它可以用EXISTS/NOT EXISTS重写:

DELETE FROM "table1"
WHERE NOT EXISTS (SELECT 1 
                 FROM "table2" 
                 WHERE "table1"."x" = "table2"."x"
                 AND "table2"."x" = 'X');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多