【问题标题】:Android SQLite: combine multiple rows into oneAndroid SQLite:将多行合二为一
【发布时间】:2019-09-01 06:02:13
【问题描述】:

我有两个 SQLite 表:
- 用户:

id 用户名 年龄 1 个千斤顶 24 2 丽莎 19


- 图片:

id 用户名 图片 1 千斤顶 jackImg1.jpg 2 插孔 jackImg2.jpg 3 丽莎丽莎Img1.jpg

我使用 LEFT JOIN 来获取所有 jack 的图像:

SELECT users.*, images.image FROM users
LEFT JOIN images ON images.username = users.username
WHERE users.username = 'jack';

结果是这样的:

id 用户名 年龄 图片 1 插孔 24 插孔Img1.jpg 1 插孔 24 插孔Img2.jpg

但我想得到这样的结果:

id 用户名 年龄 image1 image2 1 插孔 24 插孔Img1.jpg jackImg2.jpg


我怎样才能获得如上表所示的结果?
注意: 图像的数量可以从零变化到任意数量(如 15、20、...)

【问题讨论】:

  • SQL 不是这样工作的。看看你将如何生成新的列名image1image2?如果您使用不同数量的附加图像查询多个用户怎么办?
  • this

标签: android sql sqlite


【解决方案1】:

SQLite 不提供这样的功能来透视或反透视表。
你可以做的是按用户分组并使用group_concat()聚合函数来实现类似的结果:

SELECT 
  u.id, u.username, u.age, 
  group_concat(i.image, ' ') images 
FROM users u LEFT JOIN images i
ON i.username = u.username
WHERE u.username = 'jack'
GROUP BY u.id, u.username, u.age

我使用空格作为图像之间的分隔符,你可以使用任何你想要的字符。
请参阅demo
结果:

| id  | username | age | images                    |
| --- | -------- | --- | ------------------------- |
| 1   | jack     | 24  | jackImg1.jpg jackImg2.jpg |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多