用/ join或子​​查询删除mySQL

时间:2011-11-18 16:48:32

标签: mysql

我有一个有效的选择查询:

SELECT    actions.id
FROM      actions
LEFT JOIN users
ON        users.id = actions.user_id
WHERE     users.id is null;

我想删除这些记录。我尝试将选择行更改为“DELETE”,这会产生错误。我还尝试了一个子查询:

DELETE FROM actions WHERE id IN (
    SELECT    actions.id
    FROM      actions
    LEFT JOIN users
    ON        users.id = actions.user_id
    WHERE     users.id is null
);

两次尝试都会导致错误。虽然我已经通过PHP解决了这个问题,但似乎这应该是数据库可以使用单个命令执行的操作。有办法吗?

查询基本上选择actionsusers中没有相应条目的所有行(有问题的表现在使用外键,因此不会再发生此问题)。

3 个答案:

答案 0 :(得分:5)

试试这个:

DELETE    actions
FROM     actions
LEFT JOIN users
ON        users.id = actions.user_id
WHERE     users.id is null;

http://dev.mysql.com/doc/refman/5.0/en/delete.html

的更多信息

答案 1 :(得分:2)

如果您尝试在同一查询中删除/更新行并选择它们,MySQL不喜欢它。为了解决这个问题,它们支持多表DELETE语法。

DELETE a FROM actions a
LEFT OUTER JOIN users u ON u.id = a.user_id
WHERE u.id IS NULL; 

答案 2 :(得分:1)

DELETE actions  
    FROM actions LEFT JOIN
    LEFT JOIN users
    ON        users.id = actions.user_id
    WHERE     users.id is null