MySQL的:设置一个变量与列表

时间:2018-11-20 16:44:35

标签: mysql sql

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

我可以创建一个变量来存储1列数据结果以用于多个查询吗?这样做有效率吗?还是我对数据库与PL的区别感到困惑?

我在想类似下面的伪代码

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

我在存储过程中有大约8个更新要执行,我可以针对每种情况进行选择而不是创建变量,但是我觉得这不是最好的方法。有帮助吗?

1 个答案:

答案 0 :(得分:1)

MySQL中的变量需要一个简单的值,通常是字符串,数字或布尔值。在这种情况下,您可以做的是通过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;