私は、一意のIDを持つ1つのメインテーブルと、異なる選択肢をリストしたテーブルが少数です(項目を説明する1つのidカラムと1つのテキストカラムを持つ)。したがって、メインテーブルの1つのレコードに対して、選択テーブルに複数の選択肢を関連付けることができます。
GROUP_CONCATを使用して、特定の「選択」テーブルとは異なる選択肢を1つのフィールドに連結するために、すべての情報を表示できるビューを作成したいとします。しかし、私のクエリは、レコードが別の「選択」テーブルの他の複数の選択肢に関連している場合、選択肢の各リストを何度も繰り返します。クエリが...ここ
をこれらの選択肢の間のすべての可能な組み合わせを返す私のクエリ(2チョイス "のテーブルに縮小-t_age、例えばt_animal-)
サブクエリでGROUP_CONCATとJOINを使用する
SELECT general.id_g,
GROUP_CONCAT(CAST(t_age AS CHAR) SEPARATOR ', ') AS age,
GROUP_CONCAT(CAST(t_animal AS CHAR) SEPARATOR ', ') AS animal
FROM general
LEFT JOIN interm_age
INNER JOIN t_age ON interm_age.id_age = t_age.id_age
ON general.id_g = interm_age.id_g
LEFT JOIN interm_animal
INNER JOIN t_animal ON interm_animal.id_animal = t_animal.id_animal
ON general.id_g = interm_animal.id_g
GROUP BY id_g;
は、私は/各CONCATを含めることを試みましたサブクエリ内のJOINをメインのSELECTに渡しますが、MySQLは「1以上の値を返します」というメッセージが表示されます。そして?
SELECT id_g, (
SELECT GROUP_CONCAT(CAST(t_age AS CHAR) SEPARATOR ', ')
FROM general
LEFT JOIN interm_age
INNER JOIN t_age ON interm_age.id_age = t_age.id_age
ON general.id_g = interm_age.id_g
GROUP BY general.id_g )
FROM general;
[EDIT]より詳細に 、これは(FKで)私のDBである
一般
-----------
id_g | date
902 | 2016/01/01
956 | 2016/02/01
959 | 2016/02/01
interm_age
-------- ---
id_age | id_g
1 | 902
3 | 902
1 | 956
4 | 956
interm_animal
-----------
id_animal | id_g
1 | 902
5 | 902
5 | 959
7 | 959
T_AGE
---------- -
id_age | age
1 | <10y
3 | >10y
4 | >60y
t_animal
-----------
id_animal | animal
1 | bird
5 | mammal
7 | insect
そして、私のようなものたいと思います:
id_g | date | age | animal
902 | 2016/01/01 | <10y, >10y | bird, mammal
などを.. 。
ありがとうございます!
迅速な返信をありがとうございます。残念ながら、DISTINCTを追加しても役に立ちません。詳細を表示するために質問を編集しました。 – RemiC
distinctキーワードを使用するとどのような出力が得られますか? – Shadow
"サブクエリが1行以上を返します"。したがって、DISTINCTがない場合と同じエラーです。私はSELECT内のサブクエリに似た問題を抱えていましたが、UNIONを条件としてたくさんのクエリを使用して解決しました。しかし、ここでは、私は満たすための条件がありません。 – RemiC