Как соединить одинаковые поля из двух таблиц в базе данных?

Как написать запрос SQL, чтобы подсчитать количество записей для каждого dataid в таблицах person и mass, объединив значения полей name и fio в одну колонку FL, а поля department и pao в колонку UL, используя таблицу poe для объединения по dataid? Попытки с использованием общих таблиц CTE и данных из таблицы poe привели к результатам только для таблицы person с ctype 'per'. Как корректно выполнить запрос для получения полного результата?
  • 16 апреля 2024 г. 18:49
Ответы на вопрос 1
Для объединения одинаковых полей из двух таблиц в SQL можно использовать оператор UNION. 

В вашем конкретном случае, для подсчета количества записей для каждого dataid в таблицах person и mass с объединением значений полей name и fio в одну колонку FL, а полей department и pao в колонку UL, используя таблицу poe для объединения по dataid, можно написать следующий запрос:

```sql
SELECT p.dataid, CONCAT(p.name, ' ', m.fio) AS FL, CONCAT(p.department, ' ', m.pao) AS UL
FROM person p
JOIN poe ON p.dataid = poe.dataid
JOIN mass m ON poe.dataid = m.dataid

UNION

SELECT m.dataid, CONCAT(p.name, ' ', m.fio) AS FL, CONCAT(p.department, ' ', m.pao) AS UL
FROM mass m
JOIN poe ON m.dataid = poe.dataid
JOIN person p ON poe.dataid = p.dataid
```

Этот запрос сначала объединяет таблицы person и mass, используя таблицу poe для соединения по dataid, а затем объединяет результат с таблицей mass и person, чтобы учесть все уникальные dataid из обеих таблиц.
Похожие вопросы