УДАЛИТЬ ИЗ СЛЕВА ПРИСОЕДИНИТЬСЯ К СНЕЖИНКЕ

#sql #snowflake-cloud-data-platform

Вопрос:

Я пытаюсь удалить строки из таблицы с помощью функции удалить.

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

но все, что я получаю, это

Ошибка компиляции SQL: строка синтаксической ошибки 1 в позиции 7 неожиданная «a». строка синтаксической ошибки 3 в позиции 0 неожиданная «ЛЕВАЯ».

Не могли бы вы, пожалуйста, помочь мне ?

Комментарии:

1. можете ли вы удалить первую букву «а»? заменить «удалить из» на «удалить из» ?

2. Почему бы вам не проверить документацию? docs.snowflake.com/en/sql-reference/sql/delete.html

Ответ №1:

вот правильный синтаксис в snowflake:

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

Ответ №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');