gpt4 book ai didi

php - 我可以使用组连接的 2 种组合吗?或者我应该使用子查询

转载 作者:行者123 更新时间:2023-11-29 05:33:09 25 4
gpt4 key购买 nike

我有一个个人项目,我正在制作我的家庭唱片。我想弄清楚如何进行查询。我有 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,但它只适用于“格式”。一旦我为标签添加另一个组 concat,它就不起作用。我读过,也许解决方案是使用 subqueries ,但我已经尝试了每一种组合,因为我是新手,所以我没有取得很大的成功。我可以使用 group_concat 的 2 种组合吗?如果没有,我该怎么办?

谢谢,
马可

最佳答案

您需要连接所有表。使用 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

SQLFiddle Demo

关于php - 我可以使用组连接的 2 种组合吗?或者我应该使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004769/

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