我有一个个人项目,我正在建立我的家庭唱片。我正在试图弄清楚如何进行查询。我有 5 表:
albumid name
------------------
1 name1
2 name2
3 name3
4 name4
5 name5
6 name6
7 name7
formatid format
-----------------------
1 CD
2 DVD
3 CASSETTE
labelid label
------------------------
1 SONY
2 EMI
3 COLUMBIA
4 PHANTOM
5 UNIVERSAL
(一张专辑包含多张光盘,一张光盘只属于一张专辑。光盘只有一种格式)
discid albumid formatid
---------------------------
1 1 1
2 1 2
3 7 3
4 5 1
(一张专辑有多个唱片标签,唱片标签可以在很多专辑中)
albumid labelid
-----------------
1 1
1 4
5 5
4 1
让我们说一个选择专辑1,我希望看到结果:
albumid name format label
-------------------------------------------
1 name1 CD, DVD SONY, PHANTOM
我尝试过使用group concat,但它仅适用于'format'。一旦我为标签添加另一个组concat,它就不起作用。我读过,也许解决方案是使用子查询,但我已经尝试了所有组合,因为我是一个新手,我没有取得很大的成功。
我可以使用group_concat
的2种组合吗?如果没有,我该怎么办?
谢谢,
马可
答案 0 :(得分:3)
您需要加入所有表格。使用GROUP_CONCAT
(与DISTINCT
仅选择唯一值),并按albumID对其进行分组
SELECT a.albumID, a.Name,
GROUP_CONCAT(DISTINCT c.format) formats,
GROUP_CONCAT(DISTINCT e.`label`) labels
FROM album a
INNER JOIN album_disc b
ON a.albumID = b.albumid
INNER JOIN discformat c
ON b.formatid = c.formatID
INNER JOIN album_label d
ON a.albumid = d.albumID
INNER JOIN label e
ON e.labelid = d.labelid
WHERE a.albumID = 1 // remove this line if you want to select all records
GROUP BY a.albumID, a.Name