如何在mysql表中删除具有另一个查询结果的字段IN的行?

时间:2010-05-31 19:00:31

标签: mysql mysql-error-1064 delete-row sql-delete

以下是该陈述的内容:

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行。

2 个答案:

答案 0 :(得分:1)

评论中已经回答:您需要删除表别名,MySQL's DELETE statement syntax中不允许这样做(并且也不需要它)。

编辑:BTW,试试这个(从内存编码,可能是错误的):

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

答案 1 :(得分:0)

MySQL manual

  

请注意

     

如果声明表的别名,   你在引用时必须使用别名   到桌子:

     

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
)