Как использовать GROUP_CONCAT для нескольких JOIN - PullRequest
0 голосов
/ 01 марта 2020

В настоящее время я получаю данные из нескольких таблиц, используя 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 = ? 

Кроме того, в этом сценарии, какой правильный метод соединения использовать. Я ожидаю, что все поля, которые я запрашиваю, должны иметь какие-то данные.

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Совокупность перед присоединением. Что-то вроде:

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;
0 голосов
/ 04 марта 2020

Проблема была решена путем использования подзапросов для изоляции запросов 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 = ? 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...