我有一个有效的选择查询:
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解决了这个问题,但似乎这应该是数据库可以使用单个命令执行的操作。有办法吗?
查询基本上选择actions
中users
中没有相应条目的所有行(有问题的表现在使用外键,因此不会再发生此问题)。
答案 0 :(得分:5)
试试这个:
DELETE actions
FROM actions
LEFT JOIN users
ON users.id = actions.user_id
WHERE users.id is null;
的更多信息
答案 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