Как вы УДАЛИТЕ строки в таблице MySQL, которые имеют поле В результатах другого запроса? - PullRequest
0 голосов
/ 31 мая 2010

Вот как выглядит это утверждение:

DELETE FROM videoswatched vw2 
 WHERE vw2.userID IN ( SELECT vw.userID 
                         FROM videoswatched vw
                         JOIN users u ON vw.userID=u.userID
                        WHERE u.companyID = 1000
                     GROUP BY userID )

Это выглядит прилично для меня, и оператор SELECT работает сам по себе (создавая строки с одним столбцом 'userID'.

Как правило, я хочу удалить записи в таблице videoswatched, в которых для userID в записи videoswatched после присоединения к таблице пользователей обнаружен, что companyID = 1000.

Как я могу сделать это без получения ошибки в моем синтаксисе sql? Он говорит, что ошибка близка:

vw2 WHERE vw2.userID IN (
    SELECT vw.userID FROM videoswatched vw
    JOIN users u

и в строке 1.

Ответы [ 2 ]

1 голос
/ 31 мая 2010

В комментариях уже ответили: вам нужно удалить псевдоним таблицы, это не разрешено в Синтаксис оператора DELETE MySQL (и в этом нет необходимости).

Редактировать: Кстати, попробуйте это (код из памяти, может быть неправильно):

DELETE vw.*
FROM videoswatched vw
INNER JOIN users u ON vw.userID = u.userID
WHERE u.companyID = 1000;
0 голосов
/ 31 мая 2010

В руководстве MySQL написано

Примечание

Если вы объявите псевдоним для таблицы, вы должны использовать псевдоним при обращении к столу:

УДАЛИТЬ t1 ОТ теста AS t1, тест2 ГДЕ ...

Итак, вы можете попробовать

DELETE vm2 FROM videoswatched vw2 WHERE vw2.userID IN (
SELECT vw.userID FROM videoswatched vw
JOIN users u
ON vw.userID=u.userID
WHERE u.companyID=1000
GROUP BY userID
)

Но, как уже упоминалось в комментариях, вы можете просто покончить с псевдонимом

DELETE FROM videoswatched WHERE userID IN (
SELECT vw.userID FROM videoswatched vw
JOIN users u
ON vw.userID=u.userID
WHERE u.companyID=1000
GROUP BY userID
)
...