Postgresql 无法匹配联合类型text和bigint

Postgresql 无法匹配联合类型text和bigint,postgresql,union-all,Postgresql,Union All,我正在运行一个复杂的存储过程,当我有3个联合,但有2个联合没有错误时,我会得到一个错误。如果我移除前两个工会中的任何一个,它运行良好。如果我将其中一个空值设为0,则运行正常。错误是无法匹配联合类型text和bigint ```lang-sql SELECT NULL AS total_time_spent FROM tbl1 GROUP BY student_id UNION ALL SELECT NULL AS total_time_spent FROM tbl2 GROUP BY st

我正在运行一个复杂的存储过程,当我有3个联合,但有2个联合没有错误时,我会得到一个错误。如果我移除前两个工会中的任何一个,它运行良好。如果我将其中一个空值设为0,则运行正常。错误是无法匹配联合类型text和bigint

```lang-sql
SELECT NULL AS total_time_spent 
FROM tbl1
GROUP BY student_id 
UNION ALL 
SELECT NULL AS total_time_spent
FROM tbl2
GROUP BY student_id 
UNION ALL 
SELECT sum(cast(("value" ->> 'seconds') AS integer)) AS total_time_spent 
FROM tbl3 
GROUP BY student_id
```
我尝试了各种对求和结果或求和输入的转换。我从中提取的json要么为NULL,[]或者类似以下内容:

[{"date": "2020-09-17", "seconds": 458}]

根据SQL标准,空值存在于每个数据类型中,但缺少显式类型转换,第一个子查询将数据类型解析为文本,早期版本的PostgreSQL在此使用unknown,但我们不希望在查询结果中使用此数据类型

然后,错误消息是错误的结果

使用显式类型大小写可避免出现问题:

SELECT CAST(NULL AS bigint) FROM ...
UNION ...

将null值强制转换为bigint:选择null::bigint作为花费的总时间。要了解出现该错误的原因,请尝试以下查询:将输入设置为select null as total_time_PUBLED select pg_TYPE OFTOTAL_time_PUBLED from input;它返回text,这不会导致值为0?太神了否。对于实际的空值,没有插值或假设另一个值。问题是没有上下文的null被假定为null::text。因此,联合中的第一个select将该列定义为null,当第三个select将bigint值放入该列时,该列将导致联合失败。我以前尝试过将其强制转换,但我认为它返回了零。再次感谢您的帮助。非常感谢您的回答