如何在多个 JOIN 上使用 GROUP_CONCAT
How to use GROUP_CONCAT on multiple JOIN
我目前正在使用 cus_id 作为初始查询从多个表中检索数据。从这里开始,我有多个表,这些表可以包含我想要检索的各种数据行,并在一行中使用 GROUP_CONCAT 到 return 这些数据。目前,我的查询是 return 根据最大行数 return 由其中一个组连接编辑的重复数据。
SELECT a.id,c.x,c.y,c.z
GROUP_CONCAT(a.column_a) AS aca,
GROUP_CONCAT(a.column_b) AS acb,
GROUP_CONCAT(b.column_a) AS bca,
GROUP_CONCAT(b.column_b) AS bcb,
FROM `table_a` a
INNER JOIN `table_b` b ON a.id = b.id
INNER JOIN `table_c` c ON a.id = c.id
WHERE a.id = ?
另外,在这种情况下,正确的连接方法是什么?我希望我请求的所有字段都有某种数据。
问题已通过使用子查询隔离 GROUP_CONCAT 请求得到解决。这使我能够只获得我想要的数据,而不会被其他 JOIN 请求操纵的重复结果。
SELECT a.id,c.x,c.y,c.z
(SELECT GROUP_CONCAT(column_a) FROM table_a) AS aca,
(SELECT GROUP_CONCAT(column_b) FROM table_a) AS acb,
(SELECT GROUP_CONCAT(column_a) FROM table_b) AS bca,
(SELECT GROUP_CONCAT(column_b) FROM table_b) AS bcb,
FROM table_a a
INNER JOIN `table_c` c ON a.id = c.id
WHERE a.id = ?
加入前聚合。类似的东西:
select
a.*,
b.grp_a,
b.grp_b,
c.grp_x,
b.grp_y
from table_a a
join
(
select
a_id,
group_concat(a order by b_id) as grp_a,
group_concat(b order by b_id) as grp_b
from table_b
group by a_id
) b on b.a_id = a.id
join
(
select
a_id,
group_concat(x order by c_id) as grp_x,
group_concat(y order by c_id) as grp_y
from table_c
group by a_id
) c on c.a_id = a.a_id
order by a.a_id;
我目前正在使用 cus_id 作为初始查询从多个表中检索数据。从这里开始,我有多个表,这些表可以包含我想要检索的各种数据行,并在一行中使用 GROUP_CONCAT 到 return 这些数据。目前,我的查询是 return 根据最大行数 return 由其中一个组连接编辑的重复数据。
SELECT a.id,c.x,c.y,c.z
GROUP_CONCAT(a.column_a) AS aca,
GROUP_CONCAT(a.column_b) AS acb,
GROUP_CONCAT(b.column_a) AS bca,
GROUP_CONCAT(b.column_b) AS bcb,
FROM `table_a` a
INNER JOIN `table_b` b ON a.id = b.id
INNER JOIN `table_c` c ON a.id = c.id
WHERE a.id = ?
另外,在这种情况下,正确的连接方法是什么?我希望我请求的所有字段都有某种数据。
问题已通过使用子查询隔离 GROUP_CONCAT 请求得到解决。这使我能够只获得我想要的数据,而不会被其他 JOIN 请求操纵的重复结果。
SELECT a.id,c.x,c.y,c.z
(SELECT GROUP_CONCAT(column_a) FROM table_a) AS aca,
(SELECT GROUP_CONCAT(column_b) FROM table_a) AS acb,
(SELECT GROUP_CONCAT(column_a) FROM table_b) AS bca,
(SELECT GROUP_CONCAT(column_b) FROM table_b) AS bcb,
FROM table_a a
INNER JOIN `table_c` c ON a.id = c.id
WHERE a.id = ?
加入前聚合。类似的东西:
select
a.*,
b.grp_a,
b.grp_b,
c.grp_x,
b.grp_y
from table_a a
join
(
select
a_id,
group_concat(a order by b_id) as grp_a,
group_concat(b order by b_id) as grp_b
from table_b
group by a_id
) b on b.a_id = a.id
join
(
select
a_id,
group_concat(x order by c_id) as grp_x,
group_concat(y order by c_id) as grp_y
from table_c
group by a_id
) c on c.a_id = a.a_id
order by a.a_id;