Как использовать UNION и GROUP_CONCAT вместе - PullRequest
5 голосов
/ 17 августа 2011

У меня проблема с правильным синтаксисом для использования UNION и GROUP_CONCAT в этой ситуации:

У меня есть 4 таблицы:

  • base: главная таблица с большим количествомстолбцы.
  • мм: таблица мм, которая указывает на следующие две таблицы с помощью поля 'tablenames'.
  • t1 и t2, в которых хранятся связанные данные.

Записи в «базовых» таблицах могут иметь много связанных записей в t1 и t2 через таблицу mm.

Я создаю VIEW в MySQL, и мне нужно, чтобы все эти связанные записи отображались в одном столбце, разделенномзапятые.

Это базовый код MySQL:

SELECT base.uid, t1.nombre_es
FROM base
INNER JOIN mm 
ON mm.uid_local=base.uid
INNER JOIN t1 
ON mm.uid_foreign=t1.uid WHERE mm.tablenames = 't1'

UNION

SELECT base.uid, t2.nombre_es
FROM base
INNER JOIN mm 
ON mm.uid_local=base.uid
INNER JOIN t2
ON mm.uid_foreign=t2.uid WHERE mm.tablenames = 't2'

Заранее спасибо.


Я мог бы сделать это с помощью двух ПРОСМОТРОВ, первый с использованием кодавыше с именем 'viewtest', а вторая с этим кодом:

SELECT base.uid,
GROUP_CONCAT(DISTINCT vi.nombre_es ORDER BY vi.nombre_es SEPARATOR ',') as nombre

FROM base

INNER JOIN viewtest as vi
ON vi.uid=base.uid

GROUP BY uid

Теперь вопрос ¿Как я могу объединить эти два представления в одном представлении?

1 Ответ

10 голосов
/ 17 августа 2011

Вы можете использовать производные таблицы из запросов. Далее приведен пример того, как вы можете их использовать.

SELECT GROUP_CONCAT( f ) 
FROM (
  SELECT 1 AS f  # <-- QUERY #1
  UNION 
  SELECT 2 AS f  # <-- QUERY #2
  UNION 
  SELECT 3 AS f  # <-- QUERY #3
) AS T

По сути, вы можете использовать любой запрос SELECT в качестве таблицы псевдонимов. Затем вы можете применить любые агрегатные функции, которые вам нужны, к этому псевдониму запроса.

...