工会异常行为

时间:2017-10-25 21:11:16

标签: sql postgresql

尝试将具有相同字段的两个表合并到一个主表中,但由于某种原因,我得到了一个奇怪的结果。

select count(*)
from staging.sandoval_parcels
where parcel_id = 0;

返回0

select count(*)
from staging.bernalillo_parcels
where parcel_id = 0;

返回0

但是当我使用

合并表格时
CREATE TABLE staging.master_parcels
AS
    SELECT * FROM bernalillo_parcels
        UNION ALL
    SELECT * FROM sandoval_parcels
;

然后

select count(*)
from staging.master_parcels
where parcel_id = 0;

返回85553

两个表都有相同的字段,字段是相同的数据类型,也没有任何字段的值丢失,因此没有空值,为什么当表中的任何一个具有parcel_ids = 0时,我得到ids = 0 ?

2 个答案:

答案 0 :(得分:2)

字段的顺序很重要,替换显式名称的*,否则第二个查询字段将插入第一个查询位置。但不一定在你想要的同一个领域。

CREATE TABLE staging.master_parcels
AS
    SELECT parcel_id, field1 ... FROM bernalillo_parcels
        UNION ALL
    SELECT parcel_id, field1 ... FROM sandoval_parcels
;

答案 1 :(得分:0)

即使列顺序不相同,Union也会合并表。如果所有列都匹配且顺序相同,则它将合并不同的值,如果每个表的行相同,则不会创建重复项。订单和数据类型相同是很重要的。