这是基于我之前的问题。
我有下表
表格1
JobPositionId | JobPositionName
1 | Sound
2 | Lights
3 | Sound
4 | Ground
如何删除第三行(名称 = 声音和最大位置)
这是基于我之前的问题。
我有下表
表格1
JobPositionId | JobPositionName
1 | Sound
2 | Lights
3 | Sound
4 | Ground
如何删除第三行(名称 = 声音和最大位置)
DELETE FROM
Table1
WHERE
JobPositionId = (
SELECT
MAX(JobPositionId)
FROM
Table1
WHERE
JobPositionName = 'Sound'
)
抱歉,如果这没有考虑到您的“上一个问题”,我只想看看这个。
DELETE FROM Table1 WHERE jobpositionid = (SELECT MAX(jobpositionid) FROM table1 WHERE name = 'Sound');
采用:
DELETE FROM TABLE t1
JOIN (SELECT x.jobpositionname,
MAX(jobPositonId) AS max_id
FROM TABLE x
GROUP BY x.jobpositionname) t2
WHERE t1.jobPositonId = t2.max_id
AND t1.jobpositionname = t2.jobpositionname
AND t2.jobpositionname = 'Sound'
正如我在上一个问题中提到的,使用它不会触发 MySQL 1093 错误:
DELETE FROM TABLE
WHERE JobPositionId = SELECT x.id
FROM (SELECT MAX(JobPositionId) AS id
FROM TABLE
WHERE JobPositionName = 'Sound') x
似乎您要做的是删除所有重复的 JobPositionNames,只留下 JobPositionId 最低的那个。
我最近不得不做一些非常相似的事情,发现 SQL 语句变得如此复杂,在 SQL 中执行它要容易得多(如果效率低得多)。
因此,如果这是您要清理的污染数据库,只需编写一个脚本来执行此操作并完成它(并设置一些唯一索引以防止它再次发生)。
如果这种情况一直发生,并且需要定期进行,请修复执行此操作的代码。