В моей таблице MySQL у меня есть номер строки:
mysql> SELECT
COUNT(*) AS nrRow
FROM
`doTable`;
+--------+
| nrRow |
+--------+
| 334529 |
+--------+
1 row in set
Теперь мне нужно обновить столбец doTableUO в таблице doTable , используя JOIN с таблицей doTableUser .
Я пробовал Хранимая процедура без успеха, потому что у меня есть эта ошибка:
Процедурасбой выполнения 1221 - Неправильное использование UPDATE и LIMIT
Я подумал использовать SP с использованием синтаксиса LIMIT , чтобы избежать перегрузки сервера.
Если выполнить SQL-код в обычном запросе, у меня будет следующее:
[Err] 2013 - Потеря соединения с сервером MySQL во время запроса
Как я могу решить эту проблему.
Мой код ниже.
BEGIN
REPEAT
UPDATE `doTable` jjj
JOIN (
SELECT
`doTableUOUser`
FROM
`doTableUser`
GROUP BY
`doTableUOUser`
) AS kkk
SET jjj.doTableUO = kkk.doTableUOUser
WHERE
jjj.doTableUO IS NULL
AND UPPER(jjj.doTableUO) = UPPER(
kkk.doTableUOUser
) LIMIT 10000;
UNTIL ROW_COUNT() = 0 END REPEAT;
END
Редактировать # 2
Редактировать # 1
Простой SQL-запрос:
UPDATE `doTable` jjj
JOIN (
SELECT
`doTableUOUser`
FROM
`doTableUser`
GROUP BY
`doTableUOUser`
) AS kkk
SET jjj.doTableUO = kkk.doTableUOUser
WHERE
jjj.doTableUO IS NULL
AND UPPER(jjj.doTableUO) = UPPER(
kkk.doTableUOUser
);
Схема doTable
:
CREATE TABLE `doTable` (
`doTableUO` varchar(255) DEFAULT NULL,
KEY `doTableUO` (`doTableUO`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Схема doTableUser
:
CREATE TABLE `doTableUser` (
`doTableUOUser` varchar(255) DEFAULT NULL,
`doTableUOUserNumber` int(11) DEFAULT NULL,
KEY `doTableUOUser` (`doTableUOUser`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;