Как объединить таблицы в PostgreSQL? - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу объединить две таблицы в одной и той же базе данных, но не по одной и той же схеме PostgreSQL (я использую DBeaver для написания скриптов), но потерпел неудачу для некоторых примеров объединения таблиц в PostgreSQL.

Две таблицыУ меня много столбцов и образцов, я хочу выбрать AB из таблицы 1 и wang, чтобы выбрать CD, E из таблицы 2, где элементы B и C - это одно и то же, но содержащиеся в них числа не полностью совпадают.Поэтому я хочу объединить и получить A (B / C) D E.

Я использовал UNION, но он показывает [42601]: ОШИБКА: каждый запрос UNION должен иметь одинаковое количество столбцов.И когда я использовал left join, это показывает ошибку вокруг '.'.В последней попытке мой код выглядит так: выберите A из table1, оставьте соединение table2.D, table2.E, используя B = C

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Вы можете реализовать слияние, используя временную таблицу

  1. блокировка таблицы test_tbl в эксклюзивном режиме;
  2. удаление данных
  3. обновление
  4. вставка

https://parksuseong.blogspot.com/2019/07/postgresql-insert-merge-olap.html

0 голосов
/ 27 апреля 2019

Вы можете использовать этот тип запроса:

Таблица

create table table1 (
    A text,
    B int
);
insert into table1 values ('test-a', 123);

create table table2 (
    C int,
    D text,
    E text
);
insert into table2 values (3456, 'test-d', 'test-e');

Запрос

select A::text, B::text as BC, '' as D, '' as E from table1
union all
select '' as A, C::text as BC, D::text, E::text from table2

Результат

a       bc   d      e
test-a  123     
3456         test-d test-e

Это возьмет все записи из таблицы 1 (столбцы A, B, фиктивный столбец D и фиктивный столбец E) и добавит в нее записи из таблицы 2 (фиктивный столбец A, столбецC, D и E)

Пример: https://rextester.com/NWSEP53051

Если вы используете SQLite

Таблицы

create table table1 (A, B);
insert into table1 values ('test-a', 123);

create table table2 (C, D, E);
insert into table2 values (3456, 'test-d', 'test-e');

Запрос

select A, B as BC, '' as D, '' as E from table1
union all
select '' as A, C as BC, D, E from table2

Результат

| A      | BC   | D      | E      |
| ------ | ---- | ------ | ------ |
| test-a | 123  |        |        |
|        | 3456 | test-d | test-e |

Пример: https://www.db -fiddle.com / f / rE1MeJQpjGH4FZVwWmTpEX / 0

...