2010-09-01 27 views
-3

这是基于我的previous question用最大删除

我有以下表

表1

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

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

+3

你应该链接你以前的问题,让其他人知道你在说什么。 ;) – 2010-09-01 20:22:55

+0

你的问题不清楚。你应该考虑改进它,以便人们可以帮助你。 – 2010-09-01 20:33:30

回答

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' 

As I mentioned in your previous question,使用该不会触发一个MySQL 1093错误:

DELETE FROM TABLE 
WHERE JobPositionId = SELECT x.id 
         FROM (SELECT MAX(JobPositionId) AS id 
           FROM TABLE 
           WHERE JobPositionName = 'Sound') x 
+0

已更新 - 在第二个子查询中忘记了列别名。 – 2010-09-01 20:30:28

0
DELETE FROM 
    Table1 
WHERE 
    JobPositionId = (
     SELECT 
      MAX(JobPositionId) 
     FROM 
      Table1 
     WHERE 
      JobPositionName = 'Sound' 
    ) 
+1

MySQL错误1093 - 无法在FROM子句中指定更新的目标表 – 2010-09-01 20:24:07

+0

真的吗?愚蠢的MySQL。我记得有一些解决方法,但我忘记了它是什么。 – Hammerite 2010-09-01 21:58:46

0

很抱歉,如果这并未”不要考虑你的“以前的问题”,我只是看看这个问题。

DELETE FROM Table1 WHERE jobpositionid = (SELECT MAX(jobpositionid) FROM table1 WHERE name = 'Sound'); 
+0

好的,其他答案更好 - 它们的格式比我的好得多。 :) – MikeTheReader 2010-09-01 20:23:15

+1

MySQL错误1093 - 无法在FROM子句中指定用于更新的目标表 – 2010-09-01 20:23:43

0

好像你正在试图做的是删除所有重复JobPositionNames,只留下JobPositionId最低的那个。

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

因此,如果这是一个您正在尝试清理的数据库,只需编写一个脚本来完成这个任务并完成它(并设置一些独特的索引以防止它再次发生)。

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