UNION类型text和bigint无法匹配

UNION types text and bigint cannot be matched

我是 运行 一个复杂的存储过程,当我有 3 个联合时出现错误,但有 2 个联合时没有错误。如果我删除前两个联合中的任何一个,它运行良好。如果我将其中一个 NULL 设置为 0,它运行良好。错误是“UNION types text and bigint cannot be matched”

```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标准,NULL值存在于每个数据类型中,但缺少显式类型转换,第一个子查询将数据类型解析为text(早期版本的Postgre SQL 会在这里使用 unknown,但我们不想在查询结果中使用此数据类型。

错误消息是 type resolution rules for UNION in PostgreSQL 的结果。

使用明确的类型大小写来避免问题:

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