【发布时间】:2021-06-23 17:11:57
【问题描述】:
我想将一个表拆分为两个表(或更多,但假设是两个)。
table_original
id column1 column2
1 1 2
2 1 3
3 1 4
4 1 4
5 1 5
我们还可以假设id 是唯一标识符。现在我使用CREATE TABLE table1 AS SELECT * FROM table_original WHERE column2 <= 4 和CREATE TABLE table2 AS SELECT * FROM table_original WHERE column2 >= 4 将这个表分成两部分。现在我有这两个表:
table1
id column1 column2
1 1 2
2 1 3
3 1 4
4 1 4
table2
id column1 column2
3 1 4
4 1 4
5 1 5
如何从这两个表中获得与原始表相同的结果?如果我运行查询 SELECT * FROM table1 UNION SELECT * FROM table2 它将与 SELECT * FROM table_original 相同,因为 id 值是唯一的,但是如果我运行查询 SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 它会返回:
column1, column2
1 2
1 3
1 4
1 5
这和SELECT column1, column2 FROM table_original不一样,它返回:
column1, column2
1 2
1 3
1 4
1 4
1 5
同一张表中的重复项将被删除。但是,如果我想说对重复项进行计数,结果会有所不同,这很糟糕。那么有没有办法进行UNION 类型操作但保留在同一个表中找到的重复项?
【问题讨论】:
标签: sql postgresql select union distinct