Удаление из псевдонима соединения
Я хочу удалить из конструкции соединения, для которой я должен предоставить псевдоним ("сопоставленный"), так как в конце я также должен использовать предложение EXISTS для соединения. Так что все выглядит примерно так:
DELETE a
FROM (TableA a INNER JOIN
(SELECT * FROM TableX x INNER JOIN TableY y ON x.id = y.id) map
ON a.key = map.key) mapped
WHERE EXISTS
(SELECT *
FROM LookUp l
WHERE l.key1 = mapped.TableAKey
AND l.key2 = mapped.TableXKey
AND l.key3 = mapped.TableYKey)
Кажется, проблема в скобках, потому что я получаю ошибку:
Incorrect syntax near 'mapped'.
Любая помощь будет оценена.
2 ответа
Просто переписайте его, чтобы удалить из явной таблицы, и обработайте все ваши условия в предложении where что-то вроде этого.
DELETE TableA
WHERE
EXISTS (
SELECT *
FROM
TableX x
INNER JOIN TableY y ON x.id = y.id
WHERE
x.key = TableA.key and
EXISTS (
SELECT *
FROM LookUp l
WHERE l.key1 = TableA.TableAKey
AND l.key2 = x.TableXKey
AND l.key3 = y.TableYKey
)
)
Также обратите внимание, что это может быть полезно заменить DELETE TableA
с SELECT * FROM TableA
пока вы работаете над предложением where, чтобы увидеть, какие именно записи будут удалены.
Я считаю, что оператор DELETE должен ссылаться на псевдоним, используемый в вашем предложении FROM. Так как ваш псевдоним 'сопоставлен', попробуйте изменить DELETE следующим образом:
DELETE mapped
FROM (TableA a INNER JOIN
(SELECT * FROM TableX x INNER JOIN TableY y ON x.id = y.id) map
ON a.key = map.key) mapped
WHERE EXISTS
(SELECT *
FROM LookUp l
WHERE l.key1 = mapped.TableAKey
AND l.key2 = mapped.TableXKey
AND l.key3 = mapped.TableYKey)