栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

像POSTGRESQL这样的MYSQL中的UNNEST函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

像POSTGRESQL这样的MYSQL中的UNNEST函数

简短答案

对的,这是可能的。从技术角度来看,您可以通过一个查询来实现。但是问题是-最有可能的是,您正在尝试将一些逻辑从应用程序传递到数据存储。数据存储旨在 存储
数据,而不是表示/格式化数据,或者甚至对其应用某些逻辑。

是的,MySQL没有数组数据类型,但是在大多数情况下,这将不是问题,可以创建体系结构以使其符合这些限制。而且无论如何,即使您能以某种方式实现它(例如-
参见下文),您也将无法再对该数据进行适当的处​​理,因为它只是结果集。当然,您可以存储它-以便以后再建立索引,但这又是应用程序的任务-创建该导入。

另外,请确保它不是 Jaywalker的 情况,所以不要存储分隔符分隔的值,以后再尝试提取它们。

长答案

从技术角度来看,您可以使用两行集的笛卡尔乘积来执行此操作。然后使用一个众所周知的公式:

N = d 1 x10 1 + d 2 x10 2 + …

因此,您将能够创建“所有数字”表,并在之后进行遍历。该迭代与MySQL字符串函数一起,可能会导致您出现以下情况:

SELECt   data FROM (  SELECt     @next:=LOCATE(@separator,@search, @current+1) AS next,     SUBSTr(SUBSTr(@search, @current, @next-@current), @length+1) AS data,     @next:=IF(@next, @next, NULL) AS marker,     @current:=@next AS current   FROM     (SELECT 0 as i UNIOn ALL SELECT 1 UNIOn ALL SELECT 2 UNIOn ALL SELECT 3 UNIOn ALL SELECT 4 UNIOn ALL SELECT 5 UNIOn ALL SELECT 6 UNIOn ALL SELECT 7 UNIOn ALL SELECT 8 UNIOn ALL SELECT 9) as n1        CROSS JOIN     (SELECT 0 as i UNIOn ALL SELECT 1 UNIOn ALL SELECT 2 UNIOn ALL SELECT 3 UNIOn ALL SELECT 4 UNIOn ALL SELECT 5 UNIOn ALL SELECT 6 UNIOn ALL SELECT 7 UNIOn ALL SELECT 8 UNIOn ALL SELECT 9) as n2     CROSS JOIN     (SELECT        -- set your separator here:       @separator := ',',        -- set your string here:       @data:= '1,25,42,71',       -- and do not touch here:       @current   := 1,       @search    := CONCAt(@separator, @data, @separator),        @length    := CHAR_LENGTH(@separator)) AS init    ) AS joins WHERe   marker IS NOT NULL

相应的小提琴将在这里。

您还应该注意:这不是一个功能。而且对于函数(我的意思是,用户定义的with

CREATEFUNCTION
语句),不可能获得结果行集,因为MySQL中的函数无法按定义返回结果集。但是,并不是说用MySQL执行请求的转换是完全不可能的。

但是请记住: 如果您能够做某事,那并不意味着您应该这样做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号