MySQL Как объединить две таблицы (разные поля) с двумя операторами

Я хочу объединить две таблицы с разными столбцами. Причина в том, что я использую построитель отчетов (http://wpreportbuilder.com/), который поддерживает только один источник базы данных и один шаблон .docx.

Первая таблица:

CLIENT    DATE             TITLE      NAME      SOLUTION
 ABC      2019-03-01     title123   compA       fix1234
 ABC2     2019-03-01     title124   compB       fix12345

Вторая таблица (может иметь больше столбцов):

CLIENT      DATE          CUSTOMER    REPORT       PHONE
 ABC3     2019-03-01         abc       PDF         1234

Желаемый результат

CLIENT        DATE      TITLE     NAME    SOLUTION   CUSTOMER   REPORT    PHONE
 ABC      2019-03-01  title123   compA   fix1234      
 ABC2     2019-03-01  title123   compB   fix12345
 ABC3     2019-03-01                                  abc        PDF     1234

Таким образом, я могу легко использовать свой шаблон .docx с {title.all} , {name.all}, {report.all} и автоматически импортировать значения из базы данных и вставлять их обратно в документ Word.

Я могу легко сделать это, если количество столбцов совпадает, но если количество столбцов не совпадает (например, мой код ниже), он возвращает «ошибку несоответствия».

Мой код:

SELECT 

 client AS Client,
 date as "Date Scanned",
 scanner AS Scanner,
 risk AS Risk, 
 host AS Host, 
 name AS Title, 
 solution AS Solution

FROM sss1_latest
WHERE risk regexp "High" 


UNION

SELECT 

client AS Client,
date as "Date Scanned",
Recommendation AS Solution
FROM sss2_latest
WHERE Recommendation regexp "fix1" 

Приведенный выше код не отражает мою первую/вторую таблицу выше. Это было просто для объяснения.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Все запросы в UNION должны выбирать одинаковое количество столбцов. Вы можете выбрать NULL или '' в качестве заполнителей для столбцов, которые существуют только в другой таблице.

SELECT 

 client AS Client,
 date as "Date Scanned",
 scanner AS Scanner,
 risk AS Risk, 
 host AS Host, 
 name AS Title, 
 solution AS Solution,
 '' AS Customer,
 '' AS Report,
 '' AS Phone

FROM sss1_latest
WHERE risk regexp "High" 


UNION

SELECT 

 client AS Client,
 date as "Date Scanned",
 '' AS Scanner,
 '' AS Risk, 
 '' AS Host, 
 '' AS Title, 
 '' AS Solution,
 Customer,
 Report,
 Phone

FROM sss2_latest
WHERE Recommendation regexp "fix1" 

Другие вопросы по теме