-3

これは私の前の質問に基づいています。

私は次の表を持っています

表1

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

行 3 を削除するにはどうすればよいですか (名前 = サウンド、および最大位置)

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'

前の質問で述べたように、これを使用してもMySQL1093エラーはトリガーされません。

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

あなたがやろうとしているのは、重複するJobPositionNameをすべて削除し、JobPositionIdが最も低いものだけを残すことのようです。

私は最近非常に似たようなことをしなければならず、SQLステートメントが非常に複雑になっていることに気づきました。SQLでそれを行うのははるかに簡単でした(効率がはるかに低い場合)。

したがって、これがクリーンアップしようとしている汚染されたデータベースである場合は、これを実行して実行するスクリプトを作成するだけです(また、再発を防ぐためにいくつかの一意のインデックスを設定します)。

これが常に発生し、定期的に実行する必要がある場合は、これを実行するコードを修正してください。

于 2010-09-01T20:28:17.390 に答える