【发布时间】:2021-08-24 09:20:54
【问题描述】:
我有一些来自外部来源的值/ID,例如需要在使用前进行清理/类型转换的日志。所以例如如果我有这样的价值观:
800, 776, 7803, 827, 91, 976, 908
我希望能够对mysql中的每个值执行一些操作。我希望能够做这样的事情:
Select myCol*10
FROM (SELECT (800, 776, 7803, 827, 91, 976, 908) as myCol from dual);
但它失败并出现错误
错误 1241 (21000):操作数应包含 1 列。
我能找到的允许选择多行的最接近的查询是this。但这需要在每个值前面加上 UNION ALL SELECT 例如
SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9
另一个可行的选项是在内存表中,甚至像this 这样的东西。但对于看似如此简单的事情来说,这些似乎有点过头了。
【问题讨论】:
-
什么是精确 MySQL 版本?什么是最大。每个 CSV 字符串的值数量?
-
@Akina 版本:5.7.30,最大值为 1000。
-
对于您的版本 - 迭代存储过程似乎是唯一有用的选项。当然,您也可以使用带有生成或静态数字表的 double-SUBSTRING_INDEX 使用 CSV 到行集转换...
-
这对sql来说绝不是一件简单的事情。 Sql 旨在处理结构化数据库中的数据,而不是您通过复制粘贴以任何随机格式提供的任意数据集。一些数据库客户端应用程序可以将粘贴在其 gui 中的数据转换为创建表语句(大多数基于 web 的 sql fiddles 都具有此功能),但该功能由客户端应用程序提供,而不是由 sql 提供。 JSON_TABLE() 将是您在 mysql 中尝试做的最接近的事情,但这仅在 v8.0 中可用,并且需要您的数据为 json 格式。在 sql 中这样做并不值得 atm。
-
修复你的数据模型!不要在一个字符串中存储多个值。期间。