#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');