我的脚本中有一个表记录事务,每个事务都有一个唯一的ID号(自动增量),我想选择最高的事务ID行并删除它。我有类似
的东西SELECT * FROM trans WHERE (Select MAX(tranID)FROM Trans);
获取信息和
DELETE FROM Trans WHERE (SELECT MAX(trainID));
删除它。
现在这些工作,但他们选择所有内容并删除每个条目。
有什么想法吗?
答案 0 :(得分:2)
MySQL supports a LIMIT
for DELETE
queries。在完成子查询时,不要试图获取找到的MAX(trainID)
,而是指定ORDER BY
和LIMIT
。
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 );