Android SQLite中的Unnest(或类似)

Android SQLite中的Unnest(或类似),android,sqlite,android-sqlite,where-in,Android,Sqlite,Android Sqlite,Where In,我想将多行作为一行返回,由Android游标适配器处理 我现在有一个带有日期列的表,我想作为一行返回所有具有相同日期的行 考虑下表: ID | Name | Date ------------------------------- 1 | 'Mark' | '08/06/15' 2 | 'Peter' | '08/06/15' 3 | 'Henry' | '08/06/15' 4 | 'Bob' | '17/0

我想将多行作为一行返回,由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'
使用我能够获得以下查询:

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没有数组类型

最简单的方法是使用:

如果确实想使用联接,可以使用(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 Date, group_concat(Name) AS Names
FROM table_name
GROUP BY Date;

非常感谢。你说得很对,非常适合我的需要。谢谢你的帮助。有点,是的。但我还需要指定日期。
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;
SELECT Date, group_concat(Name) AS Names
FROM table_name
GROUP BY Date;