Конкатенация строк относительно соединения
Предположим, у меня есть кулинарное шоу:
cookingepisodes
id | date
---------------
1 | A
2 | B
3 | C
4 | D
…
Это шоу рассматривает продукты в этих категориях (слева) и связаны таблицей справа:
tests testitems
id | name id | episodeid | testid | name
------------ ------------------------------------
1 | cutlery 1 | 1 | 1 | Forks
2 | spices 2 | 2 | 1 | Knives
3 | 4 | 1 | Spoons
4 | 4 | 2 | Oregano
Мой желаемый вывод это:
showid | testid | testname
4 | 1,2 | cutlery, spices
3 | NULL | NULL
2 | 1 | cutlery
1 | 1 | cutlery
Я пытался использовать этот запрос, и он работает до тех пор, пока мне не нужно объединять результаты (когда в одном эпизоде два теста). Тогда объединение создаст несколько строк в зависимости от количества
SELECT DISTINCT e.*, i.testid, t.name AS testname
FROM cookingepisodes AS e
LEFT OUTER JOIN testitems AS i ON i.episodeid = e.id
LEFT OUTER JOIN tests AS t ON i.testid = t.id
ORDER BY e.date DESC
Я также пробовал что-то подобное, но не могу заставить его работать из-за ссылки на внешний блок (e.id):
JOIN (
SELECT GROUP_CONCAT(DISTINCT testid)
FROM testitems
WHERE testitems.episodeid = e.id
) AS i
Любые советы о том, как я могу решить эту проблему без реструктуризации базы данных?
1 ответ
Решение
Попробуй это -
SELECT
ce.id showid,
GROUP_CONCAT(te.testid) testid,
GROUP_CONCAT(t.name) testname
FROM cookingepisodes ce
LEFT JOIN testitems te
ON te.episodeid = ce.id
LEFT JOIN tests t
ON t.id = te.testid
GROUP BY
ce.id DESC;