mysql がサブクエリからの外部テーブルを認識しないことは知っていますが、残念ながらこれを解決する方法がわかりません。
まずテーブル構造です。3 つのテーブル (m から n) があります。
表1: ダンス
TID | Name_Of_The_Dance
12 | Heute Tanz ich
表 2: ダンサー
TAID | Name_Of_Dancer
1 | Alex Womitsch
2 | Julian Berger
Table3 (参照テーブル): 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
そして今、私の質問:
この sql クエリを mysql で動作させるにはどうすればよいですか?
ありがとうございました
//UPDATE
多くの人がフロント エンド コードと、なぜこのクエリが必要なのかを尋ねているためです。22 年前のソフトウェアがあり、このような形式のデータが必要です。もう存在しない会社からプログラムされたものであり、このプログラムのソースコードはありません。データベースと Web サイトをこの新しいデータモデル (m:n) に変更しましたが、古いプログラムには古い形式のデータが必要です。したがって、この奇妙なクエリが必要です。はい、私たちは新しいプログラムにも取り組んでいます。