【发布时间】:2019-06-19 14:23:42
【问题描述】:
我正在尝试使用 IN 函数和变量更新表。
变量的内容是一个子查询,它返回每个 STRING 的预期值(即 ID)。当我复制/粘贴更新中的值时,一切都很好。
USE `DB1`;
SET SQL_SAFE_UPDATES = 0;
SET @VAR1 = "STRING1,STRING2,STRING3,STRING4";
SET @VAR2 = (SELECT GROUP_CONCAT(`id`) FROM `tbl_A` WHERE FIND_IN_SET(`description`, @VAR1) AND `fieldtype` = '');
UPDATE `tbl_A`
SET `idaccount` = 2
WHERE `id` IN (@VAR2);
SET SQL_SAFE_UPDATES = 1;
那么为什么当我使用变量时,它只更新第一行?
【问题讨论】:
-
另外,如果你不是真的需要,我建议不要使用 MySQL 用户变量,因为它们会为查询增加不必要的额外复杂性。因为我很确定您尝试执行
UPDATE tbl_A SET idaccount = 2 WHERE id IN (SELECT id FROM tbl_A WHERE FIND_IN_SET(description, 'STRING1,STRING2,STRING3,STRING4') AND fieldtype = '');分离 SQL 查询以使用分而治之并不总是最好的方法 -
@RaymondNijland 这是我可以为我的问题提供的最低限度。我不能给你真正的价值和真正的领域的名字。
-
“这是我可以为我的问题给出的最低限度。我不能给你真正的价值和真正的字段名称”你真的回答了吗?很容易提供一个样本数据集。 不一定是真实数据。它只需要公平地反映手头问题的性质。
-
@RaymondNijland 您的想法不正确,因为您无法更新表并在子查询中使用相同的表。您将不得不像蒂姆·比格莱森(Tim Biegeleisen)那样作弊。
-
"你的想法是不正确的,因为你不能更新表并在子查询中使用同一个表。你将不得不像蒂姆·比格莱森的例子一样作弊。 " 是的@nico,我应该说
UPDATE tbl_A SET idaccount = 2 WHERE id IN (SELECT id FROM (SELECT id FROM tbl_A WHERE FIND_IN_SET(description, 'STRING1,STRING2,STRING3,STRING4') AND fieldtype = '') AS a);这就是为什么我询问示例数据和预期结果,这样我们就不必再猜测了。
标签: mysql sql-update user-variables