0

我目前正在使用 cus_id 作为初始查询从多个表中检索数据。从这里我有多个表,可以有不同的数据行,我想检索并使用 GROUP_CONCAT 在单行中返回这些数据。目前,我的查询根据其中一个组连接返回的最大行数返回重复数据。

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 = ? 

此外,在这种情况下,使用正确的连接方法是什么。我期望我要求的所有字段都有某种数据。

4

2 回答 2

0

通过使用子查询来隔离 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 = ? 
于 2020-03-04T05:57:45.670 回答
0

加入前聚合。类似于以下内容:

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;
于 2020-03-04T06:09:28.610 回答