Удаление с Максом - PullRequest
       19

Удаление с Максом

0 голосов
/ 02 сентября 2010

Это основано на моем предыдущем вопросе .

У меня есть следующая таблица

Table1

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

Как удалить строку три (Имя = звук и максимальная позиция)

Ответы [ 4 ]

0 голосов
/ 02 сентября 2010

Похоже, что вы пытаетесь сделать, это удалить все дубликаты JobPositionNames, оставив только один с самым низким JobPositionId.

В последнее время мне пришлось сделать что-то очень похожее, и я обнаружил, что операторы SQL стали настолько сложными, что было намного проще (хотя и гораздо менее эффективно) сделать это в SQL.база данных, которую вы пытаетесь очистить, просто напишите сценарий, который это делает, и покончите с этим (и установите несколько уникальных индексов, чтобы это не повторилось).

Если это происходит постояннои должно быть сделано периодически, исправить код, который делает это.

0 голосов
/ 02 сентября 2010

Извините, если это не учитывает ваш «предыдущий вопрос», я подумал, что я просто посмотрю на этот.

DELETE FROM Table1 WHERE jobpositionid = (SELECT MAX(jobpositionid) FROM table1 WHERE name = 'Sound');
0 голосов
/ 02 сентября 2010

Использование:

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
0 голосов
/ 02 сентября 2010
DELETE FROM
    Table1
WHERE
    JobPositionId = (
        SELECT
            MAX(JobPositionId)
        FROM
            Table1
        WHERE
            JobPositionName = 'Sound'
    )
...