0

声明如下:

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”表中的条目,其中在加入 users 表后,videoswatched 条目中的 userID 被发现有 companyID=1000。

我怎样才能做到这一点而不会在我的 sql 语法中出现错误?它说错误接近:

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

并在第 1 行。

4

2 回答 2

1

评论中已经回答了:您需要删除表别名,MySQL的DELETE语句语法中不允许这样做(也不需要它)。

编辑:顺便说一句,试试这个(从内存编码,可能是错误的):

DELETE vw.*
FROM videoswatched vw
INNER JOIN users u ON vw.userID = u.userID
WHERE u.companyID = 1000;
于 2010-05-31T19:30:03.383 回答
0

MySQL手册

笔记

如果为表声明别名,则在引用表时必须使用别名:

DELETE t1 FROM test 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
)
于 2010-05-31T19:30:15.770 回答