Объединение нескольких таблиц SQL-бд SQL или Java

169
28 ноября 2018, 10:50

Возникла задача и не знаю с какой стороны к ней подступиться. Есть Postgre В БД есть 9 таблиц, в некоторых из них поля совпадают, в некоторых - нет. Нужно создать три новых таблицы, в каждую из них подпихнуть по 3 существующих из этих 9. Условие: в новых таблицах должны получиться только уникальные поля. К примеру:

Таблица А
id | street
1  | Peshkov 
2  | Kalinina 
3  | Broken streetlights
Таблица B
id | street | height
1  | Kutuza | 30
2  | E95    | 100
3  | Lenina | 0
4  | Main   | 500
Таблица C
id | number | amount | height
1  | 5      | 55     | 101
2  | 11     | 1      | 7
Надо создать таблицу ABC, следующего вида:
id | street              | height | number | amount
1  | Peshkov             | NULL   |  NULL  | NULL
2  | Kalinina            | NULL   |  NULL  | NULL
3  | Broken streetlights | NULL   |  NULL  | NULL
4  | Kutuza              | 30     |  NULL  | NULL
5  | E95                 | 100    |  NULL  | NULL
6  | Lenina              | 0      |  NULL  | NULL
7  | Main                | 500    |  NULL  | NULL
8  |   NULL              | 101    |   5    | 55
9  |   NULL              | 7      |   11   | 1

Провести работу можно либо напрямую в БД менеджере через sql-запрос, либо с помощью Java на моё усмотрение. Подскажите, плз, в какую сторону рыть.

Залез в оф. документацию postrgre, нашёл там union! Получается следующее: 1)Пытаюсь создать общую таблицу из трёх, прицепляя их по очереди

create table line as 
(
    select * from a 
    union select * from b_networks_lines 
    union select * from c
);

SQL Error [42601]: ОШИБКА: все запросы в UNION должны возвращать одинаковое число столбцов

Answer 1

Если задача разовая, то можно выполнить все просто запросами. На мой взгляд ваш подход верен. Просто в запросе необходимо привести в соответствие количество и порядок столбцов выбираемых в новую таблицу. Например:

select 
  a.1
  null
  null
  null
 from a union 
select  
  b.1
  b.2
  null 
  null
 from b union 
select 
  null
  с.3
  c.1
  c.2 from c
Answer 2

Сделал немного дубовым способом: 1 взял самую "широкую" таблицу

create table abc as select * from c

дополнил её полями, существующими в других.

Потом инсертами зафигачил:

insert into abc (street, height) select street, height from b;
insert into abc (street) select street from a;

как-то так. Что делать, если полей и таблиц будет под сотню - думаю надо будет через жаву автоматизировать.

READ ALSO
Ошибка при запуске Java Web приложения

Ошибка при запуске Java Web приложения

Всем привет, есть сайт, при попытке запустить с консоли команду java -jar target/dependency/webapp-runnerjar --session-store memcache target/*

154
Как сделать адаптивный svg?

Как сделать адаптивный svg?

Необходимо сделать адаптивный SVG

239
Media запрос под моб устройства

Media запрос под моб устройства

Есть media запрос под оптимизацию картинки на мобустройства

187
Перенос строки в переменной шаблона vue

Перенос строки в переменной шаблона vue

В следующем коде я ожидаю, что при нажатии на кнопку отобразится текст из трех строкОднако, после нажатия появляется одна строка Some text<br>Some...

178