-3

这是基于我之前的问题

我有下表

表格1

JobPositionId | JobPositionName
     1        |      Sound
     2        |      Lights
     3        |      Sound
     4        |      Ground

如何删除第三行(名称 = 声音和最大位置)

4

4 回答 4

0
DELETE FROM
    Table1
WHERE
    JobPositionId = (
        SELECT
            MAX(JobPositionId)
        FROM
            Table1
        WHERE
            JobPositionName = 'Sound'
    )
于 2010-09-01T20:21:45.353 回答
0

抱歉,如果这没有考虑到您的“上一个问题”,我只想看看这个。

DELETE FROM Table1 WHERE jobpositionid = (SELECT MAX(jobpositionid) FROM table1 WHERE name = 'Sound');
于 2010-09-01T20:22:11.780 回答
0

采用:

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
于 2010-09-01T20:22:33.670 回答
0

似乎您要做的是删除所有重复的 JobPositionNames,只留下 JobPositionId 最低的那个。

我最近不得不做一些非常相似的事情,发现 SQL 语句变得如此复杂,在 SQL 中执行它要容易得多(如果效率低得多)。

因此,如果这是您要清理的污染数据库,只需编写一个脚本来执行此操作并完成它(并设置一些唯一索引以防止它再次发生)。

如果这种情况一直发生,并且需要定期进行,请修复执行此操作的代码。

于 2010-09-01T20:28:17.390 回答