【MYSQL】是否可以製作一個指令碼來更新具有相同表但邏輯不同的值的行?
2021-01-06 MYSQL
我有一張這樣的表格,裡面有資料:
+---------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| institution_id | int(11) | NO | MUL | NULL | |
| filename | varchar(200) | NO | | NULL | |
| name | varchar(200) | NO | | NULL | |
| md5 | varchar(32) | NO | | NULL | |
| version | varchar(200) | NO | | | |
| app_order | tinyint(1) unsigned | NO | | 0 | |
| active | tinyint(1) unsigned | NO | | 0 | |
| availability_oem | varchar(25) | NO | | Not Available | |
| availability_stb | varchar(25) | NO | | Not Available | |
| availability_retail | varchar(25) | NO | | Not Available | |
+---------------------+---------------------+------+-----+---------------------+----------------+
現在有一個唯一的約束(機構id+名稱)。
我仍然希望有唯一的約束,但只是在'名稱'列,我希望有相同的名稱,但不同的機構id行現在被刪除,直到只有一行與該名稱,所以名稱保持唯一。
例子:
institution_id | name | other_fields....
1 | jose | ..
2 | jose | ..
3 | maria | ..
1 | maria | ..
4 | pedro | ..
5 | mateus | ..
5 | jose | ..
所以在劇本執行之後,它將只剩下一個何塞,一個瑪麗亞,一個佩德羅,和一個馬特烏斯,他們中的哪一個並不重要,但如果我可以選擇它將是好的。
解決辦法
您可以獲得uniq names分組結果:
SELECT id from table GROUP BY name;
現在您可以刪除所有內容,除非這些id是:
DELETE FROM table WHERE id NOT IN (SELECT id from table GROUP BY name)
希望能幫上忙