Удаление из псевдонима соединения

Я хочу удалить из конструкции соединения, для которой я должен предоставить псевдоним ("сопоставленный"), так как в конце я также должен использовать предложение 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)
Другие вопросы по тегам