подзапрос с несколькими значениями

Добрый день.
Возможно ли средствами SQL вытащить такое:
Есть 2 таблицы. Во второй есть столбец, где каждому значению из 1-й может соответсвовать одно или несколько значений или вообще нет соответствия.
Делаю запрос, сливают таблицы LEFT JOIN, потом группирую GROUP BY, чтобы получить по одному значению из таблицы 1. Но желательно вытащить и те данные, которых в таблице 2 больше одного, причем в одну ячейку результата.
Например:
Табл.1
1.Иванов
2.Петров
3.Сидоров

Табл.2
1.Завсклад
1.Товаровед
2.Дворник

Нужен результат:
Иванов - Завсклад, Товаровед
Петров - Дворник
Сидоров -

Простой выбор без группировки не годится, надо чтобы Поле из таблицы 1 (в примере фамилия) была по 1 разу.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А если на предприятиии будут

Изображение Игорь

А если на предприятиии будут работть два Иванова, один завсклад, другой водитель?

Разумеется таблица в

Разумеется таблица в упрощенном виде.
У каждого работника свой уникальный id по которому во второй таблице и стоят соответствующие профессии. В примере это номера 1-3.
Реальная задача много сложнее и таблиц связывается более десятка.
Мне сам принцип понять - можно ли такое реализовать не средствами языка программирования, например PHP, а одним запросом к таблице с вложенными запросами.

WITH t1 AS (SELECT 1 id,

WITH t1 AS (SELECT 1 id, 'Иванов' sn UNION ALL
            SELECT 2, 'Петров' UNION ALL
            SELECT 3, 'Сидоров'),
     t2 AS (SELECT 1 id_t1, 'Завсклад' ps UNION ALL
	    SELECT 1, 'Товаровед' UNION ALL
            SELECT 2, 'Дворник')
SELECT t1.sn, coalesce(string_agg(t2.ps, ',' ORDER BY t2.ps), '-') 
  FROM t1 LEFT JOIN t2 ON t1.id = t2.id_t1 GROUP BY t1.sn

Спасибо. Функция string_agg

Спасибо.
Функция string_agg решила проблему.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023