首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在MySQL中模拟数组变量?

如何在MySQL中模拟数组变量?
EN

Stack Overflow用户
提问于 2012-08-29 19:18:24
回答 24查看 383.9K关注 0票数 105

appears表明MySQL没有数组变量。我应该用什么来代替呢?

似乎提出了两种替代方案:集合型标量临时表。我链接到的问题表明是前者。但是,使用这些变量而不是数组变量是一种好的做法吗?或者,如果我使用集合,基于集合的习惯用法是什么,等同于foreach

EN

回答 24

Stack Overflow用户

回答已采纳

发布于 2012-12-22 04:24:30

我一直在使用临时表,而不是数组变量。这不是最好的解决方案,但它是有效的。

请注意,您不需要正式定义它们的字段,只需使用SELECT创建它们:

代码语言:javascript
复制
DROP TEMPORARY TABLE IF EXISTS my_temp_table;
CREATE TEMPORARY TABLE my_temp_table
    SELECT first_name FROM people WHERE last_name = 'Smith';

(另请参阅Create temporary table from select statement without using Create Table。)

票数 83
EN

Stack Overflow用户

发布于 2012-08-29 19:24:10

您可以使用WHILE循环在MySQL中实现这一点:

代码语言:javascript
复制
SET @myArrayOfValue = '2,5,2,23,6,';

WHILE (LOCATE(',', @myArrayOfValue) > 0)
DO
    SET @value = ELT(1, @myArrayOfValue);
    SET @myArrayOfValue= SUBSTRING(@myArrayOfValue, LOCATE(',',@myArrayOfValue) + 1);

    INSERT INTO `EXEMPLE` VALUES(@value, 'hello');
END WHILE;

编辑:或者,您可以使用UNION ALL进行编辑

代码语言:javascript
复制
INSERT INTO `EXEMPLE`
(
 `value`, `message`
)
(
 SELECT 2 AS `value`, 'hello' AS `message`
 UNION ALL
 SELECT 5 AS `value`, 'hello' AS `message`
 UNION ALL
 SELECT 2 AS `value`, 'hello' AS `message`
 UNION ALL
 ...
);
票数 49
EN

Stack Overflow用户

发布于 2017-02-14 17:15:54

尝试使用MySql的FIND_IN_SET()函数,例如

代码语言:javascript
复制
SET @c = 'xxx,yyy,zzz';

SELECT * from countries 
WHERE FIND_IN_SET(countryname,@c);

注意:如果要传递带有CSV值的参数,则不必在StoredProcedure中设置变量。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12176709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档