我知道 mysql 无法从子查询中识别外部表,但遗憾的是我不知道如何解决这个问题。
首先是表结构,我有三个表(m到n):
表1: 舞蹈
TID | Name_Of_The_Dance
12 | Heute Tanz ich
表2: 舞者
TAID | Name_Of_Dancer
1 | Alex Womitsch
2 | Julian Berger
表3(参考表): dance2dancer
TID | TAID
12 | 213
12 | 345
我想实现什么(输出):
TID | AllDancerWhoDance
12 | 213---,345---,0---,0---,0---,0---,0---,0---,0---,0---
每个输出都应该有舞蹈 TID 和在这个舞蹈中跳舞的所有舞者。但是当我们有少于 10 个舞者时,AllDancerWhoDance 应该填写“0---”。当我们在这个舞蹈中有超过 10 个舞者时,查询应该将字符串减少到最多 10 个舞者。
更多例子来理解: 一个有 4 个舞者的舞蹈应该用 6 个零填充:
9 | 213---,345---,111---,459---,0---,0---,0---,0---,0---,0---
我们是否有超过 10 名舞者的舞蹈,查询应将其减少到 10:
9 | 213---,345---,111---,459---,333---,444---,445---,222---,192---,490--- (NO more zeros or dancer TAIDs)
这是我的查询:
select dancer.tid,
IF(count(dancer.taid) <= 10,
CONCAT_WS("",GROUP_CONCAT(dancer.taid,"&&&"), REPEAT(";0",10-count(dancer.taid)))
, (SELECT GROUP_CONCAT(a.taid,"&&&") from (SELECT ttt.taid from dance2dancer ttt inner join dance taenz on ttt.tid = taenz.tid where ttt.tid = dance.tid LIMIT 10) as a)
) AS "AllDancerWhoDance"
from dance inner join dance2dancer tt on dance.tid = tt.tid inner join dancer on tt.taid = dancer.taid group by dance.tid
我认为它会起作用,但问题是子查询没有查看外部表并且“where”子句不起作用:
where ttt.tid = dance.tid
现在我的问题是:
如何在 mysql 中实现这个 sql 查询?
谢谢
//UPDATE
因为很多人要求前端代码以及为什么我需要这个查询:我们有一个 22 年的软件,它需要这种格式的数据。它是由一家不再存在的公司编写的,我们没有该程序的任何源代码。我们已将数据库和网站更改为新的数据模型 (m:n),但旧程序仍需要旧格式的数据。因此我需要这个奇怪的查询。是的,我们也在开发一个新项目。