在我的MySQL表中,我有以下行数:
mysql> SELECT
COUNT(*) AS nrRow
FROM
`doTable`;
+--------+
| nrRow |
+--------+
| 334529 |
+--------+
1 row in set
现在,我需要使用 JOIN 和表 doTableUser 来更新表 doTable 上的列 doTableUO 。>
我尝试了此存储过程,但没有成功,因为我遇到此错误:
程序执行失败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
编辑#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;
答案 0 :(得分:0)
据我了解,您只想在2个表中放入相同的案例。
您可以像这样在一个查询中执行此操作:
UPDATE `doTable` dT
INNER JOIN `doTableUser` dTU
ON COALESCE(UPPER(dT.doTableUO),'') = COALESCE(UPPER(dTU.doTableUOUser),'')
SET dT.doTableUO = dTU.doTableUOUser
WHERE dt.doTableUO IS NOT NULL;
有关COALESCE
的更多信息