mysql unnest_MYSQL中的UNNEST函数,如POSTGRESQL

MYSQL上的POSTGRESQL是否有类似“不需要”的功能?

查询(PSQL):

select unnest('{1,2,3,4}'::int[])

结果(如表):

int |

_____|

1 |

_____|

2 |

_____|

3 |

_____|

4 |

_____|

解决方法:

简短的回答

对的,这是可能的.从技术角度来看,您可以通过一个查询实现这一目标.但问题是 – 最有可能的是,你试图将一些逻辑从应用程序传递到数据存储.数据存储旨在存储数据,而不是表示/格式化数据,或者甚至更多地应用一些逻辑.

是的,MySQL没有数组数据类型,但在大多数情况下它不会成为问题,可以创建体系结构以适应这些限制.无论如何,即使你以某种方式实现它(比如 – 见下文) – 你也无法在以后使用该数据正常工作,因为它只是结果集.当然,你可以存储它 – 比如说,稍后索引,但它又是一个应用程序的任务 – 所以要创建那个导入.

另外,请确保它不是Jaywalker案例,因此不要存储分隔符分隔值以及稍后尝试提取它们.

答案很长

从技术角度来看,您可以使用两个行集中的Cartesian product个来完成.然后使用一个众所周知的公式:

N = d1x101 + d2x102 + …

因此,您将能够创建一个“全数字”表,然后迭代它.该迭代与MySQL string functions一起可能会引导您进行如下操作:

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

相应的小提琴将是here.

你还应该注意:这不是一个功能.并且使用函数(我的意思是,用CREATE FUNCTION声明的用户定义),因为MySQL中的函数不能按定义返回结果集,所以不可能得到结果行集.但是,并不是说用MySQL执行请求的转换是完全不可能的.

但请记住:如果你能做某事,那并不意味着你应该这样做.

标签:sql,mysql,postgresql

来源: https://codeday.me/bug/20191007/1868937.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值