MYSQL选择MAX值并删除

时间:2014-02-26 18:21:32

标签: mysql sql

我的脚本中有一个表记录事务,每个事务都有一个唯一的ID号(自动增量),我想选择最高的事务ID行并删除它。我有类似

的东西
SELECT * FROM trans WHERE (Select MAX(tranID)FROM Trans); 

获取信息和

DELETE FROM Trans WHERE (SELECT MAX(trainID));

删除它。

现在这些工作,但他们选择所有内容并删除每个条目。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

MySQL supports a LIMIT for DELETE queries。在完成子查询时,不要试图获取找到的MAX(trainID),而是指定ORDER BYLIMIT

DELETE FROM Trans
ORDER BY trainID DESC
LIMIT 1

它应该可以在子查询中加入,而不是尝试在WHERE中使用它:

DELETE t.*
FROM 
  Trans t
  INNER JOIN (SELECT MAX(trainID) maxt FROM Trans) tmax ON t.trainID = tmax.maxt

Here are both version in action

您删除所有行,因为(SELECT MAX(trainID))评估为布尔TRUE,它匹配所有行

答案 1 :(得分:1)

  

现在这些工作,但他们选择所有内容并删除每个条目。

在此查询中:

DELETE FROM Trans WHERE (SELECT MAX(trainID));

过程结果将导致:

DELETE FROM Trans WHERE (true);

因此这等于=> DELETE FROM Trans这就是为什么删除所有表数据的原因!

答案 2 :(得分:0)

DELETE FROM Trans WHERE trainId = (SELECT MAX(trainID) FROM Trans );