gpt4 book ai didi

mysql - 在 MySQL 的存储过程中错误使用 UPDATE、REPEAT 和 LIMIT

转载 作者:行者123 更新时间:2023-11-30 21:33:04 25 4
gpt4 key购买 nike

在我的 MySQL 表中,我有这样的行数:

mysql> SELECT
COUNT(*) AS nrRow
FROM
`doTable`;
+--------+
| nrRow |
+--------+
| 334529 |
+--------+
1 row in set

现在我需要使用 JOIN 更新表 doTable 上的列 doTableUO 和表 doTableUser

我试过这个存储过程但没有成功,因为我有这个错误:

Procedure execution failed 1221 - Incorrect usage of UPDATE and LIMIT

我想使用 SP 使用 LIMIT 语法来避免服务器过载。

如果在正常查询中执行 SQL 代码,我有这个结果:

[Err] 2013 - Lost connection to MySQL server during query

我该如何解决这个问题。

下面是我的代码。

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 enter image description here

编辑#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;

最佳答案

据我了解,您只想将相同的案例放入 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的更多信息

关于mysql - 在 MySQL 的存储过程中错误使用 UPDATE、REPEAT 和 LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55257540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com