我正在尝试将以下查询更改为删除返回行的查询。
SELECT bad_rows.*
FROM votes as bad_rows
INNER JOIN(
SELECT MIN(id) as min_id, votes.object_id, votes.user_id
FROM votes WHERE is_archived=FALSE AND
votes.direction < 20
GROUP BY votes.object_id, votes.user_id, votes.content_type_id
having COUNT(votes.object_id) > 1
) AS double_rows ON
double_rows.object_id = bad_rows.object_id
AND double_rows.user_id=bad_rows.user_id
AND bad_rows.is_archived=False
AND double_rows.min_id <> bad_rows.id
此选择有效,并为我提供了我想要删除的行。现在,如果我将select更改为删除,则我的查询不起作用。
DELETE bad_rows.*
FROM votes as bad_rows
INNER JOIN(
SELECT MIN(id) as min_id, votes.object_id, votes.user_id
FROM votes WHERE is_archived=FALSE AND
votes.direction < 20
GROUP BY votes.object_id, votes.user_id, votes.content_type_id
having COUNT(votes.object_id) > 1
) AS double_rows ON
double_rows.object_id = bad_rows.object_id
AND double_rows.user_id=bad_rows.user_id
AND bad_rows.is_archived=False
AND double_rows.min_id <> bad_rows.id
错误:“bad_rows”或附近的语法错误 第1行:删除bad_rows。*
答案 0 :(得分:3)
您无法指定要删除的列(*
中的bad_rows.*
。)
此外,大多数数据库不允许您指定要删除的别名。因此,通常的删除方法如下:
DELETE VOTES
WHERE ID IN
(
<subquery selecting the ID's of the rows you want to delete>
)
答案 1 :(得分:0)
使用Andomar的建议我得到了它。
DELETE FROM votes WHERE id IN (
SELECT bad_rows.id
FROM votes as bad_rows
INNER JOIN(
SELECT MIN(id) as min_id, votes.object_id, votes.user_id
FROM votes where is_archived=FALSE and votes.direction < 20
GROUP BY votes.object_id, votes.user_id, votes.content_type_id
having COUNT(votes.object_id) > 1
) as double_rows on double_rows.object_id = bad_rows.object_id and double_rows.user_id=bad_rows.user_id and bad_rows.is_archived=False
and double_rows.min_id <> bad_rows.id
)