【发布时间】:2016-11-16 00:33:25
【问题描述】:
我在 MySQL 下有一个数据库,其中一个具有唯一 ID 的主表,几个列出不同选择的表(一个 id 列,一个用于描述项目的文本列)。因此,对于主表中的一条记录,我可以将多个选项关联到选项表。
我想创建一个所有信息都可见的视图,使用 GROUP_CONCAT 将给定“选择”表中的不同选择连接到一个字段中。但是,当记录与另一个“选择”表中的其他多项选择相关时,我的查询会重复每个选择列表多次。查询返回这些选项之间的所有可能组合...
这是我的查询(例如,减少到 2 个“选择”表 -t_age, t_animal-)
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;
[编辑]
更详细地说,这是我的数据库(带有 FK)
一般
------------
id_g | date
902 | 2016/01/01
956 | 2016/02/01
959 | 2016/02/01
中间年龄
------------
id_age | id_g
1 | 902
3 | 902
1 | 956
4 | 956
中间动物
------------
id_animal | id_g
1 | 902
5 | 902
5 | 959
7 | 959
t_age
------------
id_age | age
1 | <10y
3 | >10y
4 | >60y
t_动物
------------
id_animal | animal
1 | bird
5 | mammal
7 | insect
我想要类似的东西:
id_g | date | age | animal
902 | 2016/01/01 | <10y, >10y | bird, mammal
等等……
提前致谢!
【问题讨论】:
标签: mysql join subquery group-concat