以下查询无法正常工作,这绝对超出了我的想法:
DELETE orig FROM revision AS orig JOIN (
SELECT id
FROM revision
GROUP BY id
HAVING COUNT(*) > 1
) AS joined ON orig.id = joined.id
WHERE orig.id=1
ORDER BY orig.delta ASC
LIMIT 1
第8行引发错误,因此ORDER BY
子句。但是,我看不出它有什么问题(表revision
确实有一个名为delta
的列。此外,将DELETE orig
更改为SELECT *
会产生完美无瑕的工作指令。
是否可能未加载delta
- 列?或者是什么导致了这个错误?
修改
好的,我不知道你不能在ORDER BY
查询中使用DELETE
多行。
好吧,我想要完成的是我删除了我的表中的一行,它有一个多次出现的id(生产中将是5)并且具有该id的所有行的最低delta。
即。我在修订表中有两行,都有相同的id。我现在想要删除那两个最低delta的行。这应该是可伸缩的,因此我删除所有行(具有相同的id)但只删除一个(具有最高delta的行)。
答案 0 :(得分:2)
如果DELETE语句中有多个表,则不能使用ORDER BY
答案 1 :(得分:1)
我认为这就是你要做的。仅当(id,delta)
组合具有唯一约束时,它才会仅删除1行:
DELETE orig
FROM revision AS orig
JOIN
( SELECT MIN(delta) AS delta
FROM revision
WHERE id = 1
HAVING COUNT(*) > 1
) AS joined ON orig.delta = joined.delta
WHERE orig.id = 1 ;
要删除除{(1)}之外的所有行(具有相同的id
),您可以使用:
delta