SQL-запрос, объединяющий 3 таблицы с выводом, подобным строке

#sql #postgresql

#sql #postgresql

Вопрос:

Мне нужно написать запрос, который объединяет 3 разные таблицы и представляет их определенным образом.

  • Таблица 1: Сотрудники
  • Таблица 2: отделы
  • Таблица 3: Автомобили

В таблице Employees есть объединенный столбец для объединения с таблицей ‘Department‘ (department_id) и таблицей ‘Cars‘ (emp_id).


Мне нужно написать запрос, который отображает следующие данные в соответствии с пользовательскими данными (включая таблицы «отдел» и «автомобили»):

  1. Сотрудники — все столбцы
  2. Отдел — столбец отдела
  3. Cars — все столбцы, но записанные в виде строкового текста с » , «, разделяющим каждый столбец в строке.

Я получил следующий запрос, но я не знаю, как напечатать столбцы таблицы «Cars» в виде строки:

 select
  Employees.*, 
  Departments.department, 
  Cars.* 
from Employee
join department on departments.id = employees.department_id 
join Cars on cars.emp_id = employees.id order by employees.id
  

Комментарии:

1. не могли бы вы указать версию и имя базы данных?

2. Здравствуйте, Шаки, пожалуйста, предоставьте СУБД, образцы данных и желаемый результат.

3. Правильно отметьте свой вопрос. Что это за СУБД?

4. это postgresql. Желаемый результат: все столбцы Employee, столбец Department и строка всех столбцов Cars, разделенных запятой.

Ответ №1:

Я думаю, это то, что вы хотите:

 select e.*,d.*,concat(c.col1,c.col2,c.col3.... ,',')
from Employees e,Departments d,Cars c
where 
e.department_id=d.department_id 
and d.emp_id=e.emp_id
order by e.emp_id;
  

Ответ №2:

Вы можете видеть результаты в виде записи, которая почти соответствует желаемому формату:

 select e.*, d.department, c 
from Employee e join
     department d
     on d.id = e.department_id join
     Cars c
     on c.emp_id = e.id
order by e.id;
  

Поскольку вам нужен разделитель через запятую, вы можете получить результат в виде строки, используя:

 select e.*, d.department,
       substring(c::text, 2, length(c::text) - 2) as cars
from Employee e join
     department d
     on d.id = e.department_id join
     Cars c
     on c.emp_id = e.id
order by e.id;