在 union all postgres 中选择枚举列

selecting enum columns in union all postgres

我不知道如何设置我的查询。 我想做什么 select 在一个查询中没有关系的两个表。 在研究之后我发现了 union all 但问题是在某些情况下我有类型或状态列是枚举并且我在尝试 select 它们时遇到错误:

ERROR: UNION could not convert type money_transfer_type_enum to invoice_type_enum

我认为在查询中 select 两个完全不同的表不是最佳做法,但出于某些原因我需要它,所以另一个问题是: 如果 union all 不会帮我处理这个,还有别的吗? 提前谢谢

问题似乎是您不能 union 两个不同的枚举。您可以做的是将两个集合合并在一起,但将它们放在单独的列中。

select money_transfer_type_enum, 
       NULL as invoice_type_enum
from tblA

union all

select NULL as money_transfer_type_enum,
       invoice_type_enum
from tblB

不确定这是否能解决您的问题,但这应该允许您将两个表合并在一起而不会出错。

不确定列的类型是什么,但您可以简单地将两列转换为相同的类型,例如

SELECT money_transfer_type_enum::VARCHAR
FROM table1

UNION ALL

SELECT invoice_type_enum::VARCHAR
FROM table2

Varchar 是解决此类不兼容问题的全部方法,但它会带来一些成本。 您可能想看看将两列都转换为 INTEGER 是否也可以解决问题