【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)

希望能幫上忙

出處

Have any Question?

Let us answer it!