これは私の前の質問に基づいています。
私は次の表を持っています
表1
JobPositionId | JobPositionName
1 | Sound
2 | Lights
3 | Sound
4 | Ground
行 3 を削除するにはどうすればよいですか (名前 = サウンド、および最大位置)
これは私の前の質問に基づいています。
私は次の表を持っています
表1
JobPositionId | JobPositionName
1 | Sound
2 | Lights
3 | Sound
4 | Ground
行 3 を削除するにはどうすればよいですか (名前 = サウンド、および最大位置)
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'
前の質問で述べたように、これを使用してもMySQL1093エラーはトリガーされません。
DELETE FROM TABLE
WHERE JobPositionId = SELECT x.id
FROM (SELECT MAX(JobPositionId) AS id
FROM TABLE
WHERE JobPositionName = 'Sound') x
あなたがやろうとしているのは、重複するJobPositionNameをすべて削除し、JobPositionIdが最も低いものだけを残すことのようです。
私は最近非常に似たようなことをしなければならず、SQLステートメントが非常に複雑になっていることに気づきました。SQLでそれを行うのははるかに簡単でした(効率がはるかに低い場合)。
したがって、これがクリーンアップしようとしている汚染されたデータベースである場合は、これを実行して実行するスクリプトを作成するだけです(また、再発を防ぐためにいくつかの一意のインデックスを設定します)。
これが常に発生し、定期的に実行する必要がある場合は、これを実行するコードを修正してください。