gpt4 book ai didi

MySql:设置一个带有列表的变量

转载 作者:行者123 更新时间:2023-12-01 00:15:07 25 4
gpt4 key购买 nike

我现在一直在研究 MySQL 语句和类似的问题,但似乎没有任何运气。

我可以创建一个变量来存储要在多个查询中使用的 1 列数据结果吗?这样做是否有效,或者我是否对 DB 与 PL 的不同感到困惑?

我在想类似下面的伪代码

SET list = Select ID from Sales;
Update items set aValue = X where salesID in list
delete SalesMessages where salesId in list

我在存储过程中有大约 8 个更新要做,我可以为每个案例进行选择,而不是创建一个变量,但我觉得这不是最好的方法。有什么帮助吗?

最佳答案

MySQL 中的变量需要一个简单的值,通常是字符串、数字或 bool 值。在这种情况下,您可以做的是通过 GROUP_CONCAT() 路由您的销售 ID,这将返回所有销售 ID 的逗号分隔列表(有一些限制 - 如果您有很多销售 ID,您可能需要调整一些配置设置并且根本无法过滤它们),然后执行 FIND_IN_SET() ,它检查逗号分隔列表中的值。像这样的东西适用于小集合:

SET @list = (SELECT GROUP_CONCAT(ID) FROM Sales);
UPDATE items SET aValue = X WHERE FIND_IN_SET(salesID, @list) > 0;
DELETE FROM SalesMessages WHERE FIND_IN_SET(salesId, @list) > 0;

您还可以完全通过连接绕过变量创建,这会更快,并且可以绕过 GROUP_CONCAT() 的长度限制:
UPDATE items as i INNER JOIN Sales as s ON s.ID = i.salesID SET i.aValue = X;
DELETE sm FROM SalesMessages as sm INNER JOIN Sales as s ON s.ID = sm.salesID;

关于MySql:设置一个带有列表的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397668/

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