如何在SQLite中将输入数组的值转换为单列行数据?
在SQLite中将数组值转为行数据的方法
要把给定数组的每个元素作为akshar列的行数据(保留所有数组元素,不受数据库现有数据影响),可以用以下方式实现:
1. 用VALUES构造临时数据集
SQLite支持通过VALUES子句生成临时行集,直接查询这个行集就能得到目标结果:
SELECT value AS akshar FROM ( VALUES ('क'), ('ख'), ('ग'), ('घ'), ('च'), ('छ'), ('ज'), ('झ') );
执行后输出:
| akshar |
|---|
| क |
| ख |
| ग |
| घ |
| च |
| छ |
| ज |
| झ |
2. 关联其他表时保留所有数组元素
如果要关联其他表查询字符的相关信息,用LEFT JOIN就能保留数组里的所有元素,即使关联表中没有对应数据:
假设关联表名为char_details,包含akshar和description列,查询语句如下:
SELECT t.akshar, cd.description FROM ( VALUES ('क'), ('ख'), ('ग'), ('घ'), ('च'), ('छ'), ('ज'), ('झ') ) AS t(akshar) LEFT JOIN char_details cd ON t.akshar = cd.akshar;
这样数组里的每个元素都会显示,没有对应描述的行description字段会返回NULL。
为什么IN子句不符合需求
你之前用的WHERE ... IN (...)是从现有表的行中筛选符合条件的数据,只会返回数据库中已存在的字符;而我们需要的是把外部数组作为独立数据源,因此必须用VALUES构造临时表来生成所有行。
内容的提问来源于stack exchange,提问作者Manishoaham
相关产品推荐
相关产品推荐

