如何在PostgreSQL中合并表格?

时间:2019-04-27 00:23:28

标签: postgresql union

我想在同一数据库中合并两个表,但不希望在PostgreSQL的相同模式下合并(我使用DBeaver编写脚本),但是在PostgreSQL中合并表的某些示例失败了。

这两个表有很多列和样本,我想从表1中选择AB,从表2中选择wang,从CD中选择E,其中B和C项完全相同,但是所包含的数字并不完全相同。相同。因此,我想合并并获得A(B / C)DE。

我使用了UNION,但显示[42601]:错误:每个UNION查询必须具有相同的列数。当我使用左联接时,它在“。”周围显示错误。 在最后一次尝试我的代码,如: 从table1左联接中选择A table2.D,table2.E使用B = C

2 个答案:

答案 0 :(得分:0)

您可以使用这种查询:

表格

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

答案 1 :(得分:-1)

您可以使用临时表实现合并

  1. 以独占模式锁定表test_tbl;
  2. 数据删除
  3. 更新
  4. 插入

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