#sql #postgresql
#sql #postgresql
Вопрос:
Мне нужно написать запрос, который объединяет 3 разные таблицы и представляет их определенным образом.
- Таблица 1: Сотрудники
- Таблица 2: отделы
- Таблица 3: Автомобили
В таблице Employees есть объединенный столбец для объединения с таблицей ‘Department‘ (department_id) и таблицей ‘Cars‘ (emp_id).
Мне нужно написать запрос, который отображает следующие данные в соответствии с пользовательскими данными (включая таблицы «отдел» и «автомобили»):
- Сотрудники — все столбцы
- Отдел — столбец отдела
- 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;