假设我有两张桌子:
album
album_id
album_name
和
song
album_id
song_name
track_number
我想创建一个SQL查询,给定album_id
,将在一个字段中返回album_name
,并在逗号分隔列表中返回所有song_name
,在另一个字段中track_number
。
最终结果将是一行,一行,两列:
album_name:“某些专辑名称”
歌曲:“song1,song2,song3,song4”
我想我需要这样的事情:
SELECT a.*, group_concat(s.name ORDERBY s.track_number SEPERATOR ', ')
FROM album a
LEFT JOIN songs s
WHERE (a.album_id=1)
这是错的,但我认为我的方向正确
这在Android上的sqlite3中是否可行?你能告诉我怎么样吗?
**编辑** 根据ypercube的优秀答案,有效,有没有办法添加另一个字段,就像歌曲,但我们称之为音乐家。
所以新表是
musician
album_id
musician_name
musician_number
我的光标现在会给我一个结果:
album_name:“某些专辑名称”
歌曲:“song1,song2,song3,song4”
音乐家:“musician1,musician2,musician3”
音乐家的值是否按musician_number排序?
答案 0 :(得分:2)
我认为您不能在sqlite的GROUP_CONCAT()
中选择订单,只能选择分隔符。请参阅 Aggregate functions in SQLite
:
SELECT a.*
, group_concat(s.name, ', ')
FROM album a
LEFT JOIN songs s
ON s.album_id = a.album_id
WHERE a.album_id = 1 --- skip this line for all the albums to be displayed
GROUP BY a.album_id
或者这个(希望)获得你想要的订单:
SELECT a.*
, song_list
FROM a
INNER JOIN
( SELECT album_id
, group_concat(name, ', ') song_list
FROM
( SELECT a.album_id
, s.name
FROM a
LEFT JOIN songs s
ON s.album_id = a.album_id
WHERE a.album_id = 1
ORDER BY a.album_id
, s.track_number
) g
GROUP BY a.album_id
) grp
ON grp.album_id = a.album_id
如果你有另一个表到group_concat:
SELECT a.*
, song_list
, artist_list
FROM a
INNER JOIN
( SELECT album_id
, group_concat(name, ', ') song_list
FROM
( SELECT a.album_id
, s.name
FROM a
LEFT JOIN songs s
ON s.album_id = a.album_id
--- WHERE a.album_id = 1
ORDER BY a.album_id
, s.track_number
) g
GROUP BY a.album_id
) grp
ON grp.album_id = a.album_id
INNER JOIN
( SELECT album_id
, group_concat(artist_name, ', ') artist_list
FROM
( SELECT a.album_id
, r.artist_name
FROM a
LEFT JOIN artists r
ON r.album_id = a.album_id
--- WHERE a.album_id = 1
ORDER BY a.album_id
, r.artist_order
) g2
GROUP BY a.album_id
) grp2
ON grp2.album_id = a.album_id
答案 1 :(得分:0)
您不能直接执行此操作,但可以通过类似select album_name, song_name from album natural join song ... ...
的常规查询来获取所需的字段,然后使用光标迭代结果集以构建逗号分隔的字符串。完成CSstring的构建后,可以将其写在CSV文件中。