2010-05-31 9 views
0

Вот что заявление выглядит следующим образом:.Как вы удаляете строки в таблице mysql, у которых есть поле В результатах другого запроса?

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) 

Это выглядит прилично для меня, и ЗЕЬЕСТ работает сама по себе (производство строк с одного столбца «USERID»

В принципе, я хочу удалите записи в таблице «videowatched», где идентификатор пользователя в записи, записанной в видео, после присоединения к таблице пользователей, имеет идентификатор компании = 1000.

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

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

и на линии 1.

+0

Нет оснований назначать ему псевдоним, попробуйте удалить vw2 и просто сделать его просмотренным видео WHERE 'userID' IN –

+0

Не относится к ошибке, но также имеет значение' GROUP BY userID'. –

ответ

1

Он уже был дан ответ в комментариях: Вам нужно удалить псевдоним таблицы, не допускается в MySQL's DELETE statement syntax (и нет необходимости в этом, либо).

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

DELETE vw.* 
FROM videoswatched vw 
INNER JOIN users u ON vw.userID = u.userID 
WHERE u.companyID = 1000; 
+0

спасибо большое! Единственная настройка, которую я сделал бы, это отнять «INNER» в «INNER JOIN», только потому, что я не думаю, что ее полезно в удалении – gsquare567

+0

@gsquare - INNER JOIN и JOIN - это то же самое. Если не указано, JOIN по умолчанию имеет значение INNER. – mdma

0

MySQL manual говорит

Примечание

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

DELETE t1 FROM тест AS t1, test2 WHERE ...

Таким образом, вы можете попробовать

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 
)