Во-первых, давайте загрузим ваши данные образца
mysql> drop database if exists dilyan_kn;
Query OK, 1 row affected (0.04 sec)
mysql> create database dilyan_kn;
Query OK, 1 row affected (0.00 sec)
mysql> use dilyan_kn
Database changed
mysql> create table TBL1
-> (col1 char(1),col2 char(1),col3 int);
Query OK, 0 rows affected (0.11 sec)
mysql> insert into TBL1 values
-> ( 'A' , 'B' , 1 ),
-> ( 'B' , 'C' , 3 ),
-> ( 'A' , 'C' , 11 ),
-> ( 'A' , 'D' , 13 ),
-> ( 'B' , 'D' , 10 );
Query OK, 5 rows affected (0.06 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from TBL1;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| A | B | 1 |
| B | C | 3 |
| A | C | 11 |
| A | D | 13 |
| B | D | 10 |
+------+------+------+
5 rows in set (0.00 sec)
mysql>
Глядя на ваш желаемый результат в вопросе, похоже, что вы хотите самое высокое значение col3 для любого заданного col1.
Пример
Для col1 = A у вас есть различные значения 1, 11 и 13. 13 является самым высоким
Для col1 = B у вас есть различные значения 3 и 10. 10 является самым высоким
Вам потребуется подзапрос, который находит наибольшее значение col3 для любого заданного col1.
Вот этот запрос:
SELECT col1,MAX(col3) maxcol3
FROM TBL1 GROUP BY col1;
Запустим этот подзапрос
mysql> SELECT col1,MAX(col3) maxcol3
-> FROM TBL1 GROUP BY col1;
+------+---------+
| col1 | maxcol3 |
+------+---------+
| A | 13 |
| B | 10 |
+------+---------+
2 rows in set (0.00 sec)
mysql>
Давайте использовать этот подзапрос, чтобы СОЕДИНИТЬСЯ со всей таблицей и обновлять столбец col3 всякий раз, когда столбец col1 подзапроса совпадает со столбцом col1 таблицы. Вот этот запрос:
UPDATE
(
SELECT col1,MAX(col3) maxcol3
FROM TBL1 GROUP BY col1
) A
INNER JOIN TBL1 B USING (col1)
SET B.col3 = A.maxcol3;
Давайте запустим этот запрос UPDATE JOIN и выберем все TBL1
mysql> UPDATE
-> (
-> SELECT col1,MAX(col3) maxcol3
-> FROM TBL1 GROUP BY col1
-> ) A
-> INNER JOIN TBL1 B USING (col1)
-> SET B.col3 = A.maxcol3;
Query OK, 3 rows affected (0.05 sec)
Rows matched: 5 Changed: 3 Warnings: 0
mysql> select * from TBL1;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| A | B | 13 |
| B | C | 10 |
| A | C | 13 |
| A | D | 13 |
| B | D | 10 |
+------+------+------+
5 rows in set (0.00 sec)
mysql>
Миссия выполнена !!!
Причина, по которой 5 строк совпали, но только 3 изменились, связана с тем, что строки, у которых (col1, col3) (A, 13) и (B, 10) уже имеют максимальные значения и don не нужно менять.