Mysql在ORDER BY子句上抛出sql错误

时间:2013-10-19 19:04:32

标签: mysql sql

以下查询无法正常工作,这绝对超出了我的想法:

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

2 个答案:

答案 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