MySQLでDELETE IF EXISTSでおこられた
おこなの?
PRIMARY KEY (`key`,`value`)
のテーブル
key | value |
---|---|
1 | hoge |
1 | fuga |
2 | hoge |
3 | fuga |
4 | hogefuga |
で、値が「hoge」「fuga」のデータの値を「hogefuga」に統一したい。
key | value |
---|---|
1 | hogefuga |
2 | hogefuga |
3 | hogefuga |
4 | hogefuga |
って形にしたいとき、
--「hoge」を「hogefuga」に更新 update テーブル set value = "hogefuga" where value = "hoge"; --「fuga」かつ同じkeyで「hogefuga」持ってるデータを削除 delete from テーブル where value = "fuga" and exists( select t2.* from テーブル t2 where t2.value = "hogefuga" and t2.key = t1.key ); -- >>> おこられるorz
なもんでこうして対応
--「hoge」を「hogefuga」に更新 update テーブル set value = "hogefuga" where value = "hoge"; --「fuga」かつ同じkeyで「hogefuga」持ってるデータを「deleted」に更新 update テーブル t1 inner join ( select key from テーブル where value = "hogefuga" ) t2 on t1.key = t2.key set value = "deleted" where value = "fuga"; --「deleted」データを削除 delete from テーブル where value = "deleted";
なんか回りくどい