Объединение строк в соответствии с JOIN

Предположим, у меня есть кулинарное шоу:

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

Любые советы как я могу решить эту проблему без реструктуризации базы данных?

5
задан Eikern 9 January 2012 в 12:19
поделиться