gpt4 book ai didi

android - 在 SQLite 中取消嵌套(或类似的)

转载 作者:行者123 更新时间:2023-12-05 00:06:35 24 4
gpt4 key购买 nike

我想将多行作为单行返回,由 Android 游标适配器处理。

我目前有一个包含日期列的表,我想以单行的形式返回具有相同日期的所有行。

考虑下表:

     ID |   Name   |   Date
-------------------------------
1 | 'Mark' | '08/06/15'
2 | 'Peter' | '08/06/15'
3 | 'Henry' | '08/06/15'
4 | 'Bob' | '17/04/16'
5 | 'Tony' | '23/08/13'
6 | 'Tim' | '17/04/16'

我想查询的结果如下:

         Date    |       Names
------------------------------------
'08/06/15' | 'Mark, Peter, Henry'
'17/04/16' | 'Bob, Tim'
'23/08/13' | 'Tony'

使用 this link我能够获得以下查询:

SELECT t1.id, GROUP_CONCAT(t1.Name ) AS Names
FROM Table1 t1 JOIN Table2 t2 ON t1.ID = t2.ID
GROUP BY t1.ID;

但是,由于所有数据都来自同一个表,而且我知道要提前查询的日期,所以我希望对输入的数组使用 JOIN 并让 SQLite 解析它(即。就像 Postgres 中的 unnest 一样)就好像它来自一个实际的表。

数组应该是这样的:

['08/06/15', '17/04/16', '23/08/13', '09/08/18']

这也可以通过嵌套 SQL 查询来完成,但如果可能的话,我想要一个优化的解决方案。

最佳答案

SQLite 没有数组类型。

最简单的方法是使用 IN operator :

SELECT ID, group_concat(Name) AS Names
FROM MyTable
WHERE Date IN ('08/06/15', '17/04/16', '23/08/13', '09/08/18')
GROUP BY ID;

如果你真的想使用连接,你可以用VALUES clause构造一个虚拟表。 (在 Android Jelly Bean 或更高版本中),或复合查询:

SELECT ID, group_concat(Name) AS Names
FROM MyTable
JOIN (VALUES('08/06/15'), ('17/04/16'), ('23/08/13'), ('09/08/18'))
ON Date = column1
GROUP BY ID;
SELECT ID, group_concat(Name) AS Names
FROM MyTable
JOIN (SELECT '08/06/15' AS Date UNION ALL
SELECT '17/04/16' UNION ALL
SELECT '23/08/13' UNION ALL
SELECT '09/08/18' ) USING (Date)
GROUP BY ID;

关于android - 在 SQLite 中取消嵌套(或类似的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51760204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com