Ste*_*ane 3 postgresql union-all
我正在运行一个复杂的存储过程,当我有 3 个联合时出现错误,但有 2 个联合没有错误。如果我删除前两个工会中的任何一个,它运行良好。如果我将其中一个 NULL 设为 0,则它运行良好。错误是“UNION 类型 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
```
Run Code Online (Sandbox Code Playgroud)
我已经尝试过对总和结果或总和输入进行各种类型的转换。我从中提取的 json 是 NULL、[] 或类似的东西:
[{"date": "2020-09-17", "seconds": 458}]
Run Code Online (Sandbox Code Playgroud)
Lau*_*lbe 12
根据 SQL 标准,NULL 值存在于每种数据类型中,但缺少显式类型转换,第一个子查询将数据类型解析为 to text(早期版本的 PostgreSQL 会在unknown这里使用,但我们不想要这种数据类型在查询结果中)。
错误消息是PostgreSQL 中类型解析规则UNION的结果。
使用显式类型大小写来避免这个问题:
SELECT CAST(NULL AS bigint) FROM ...
UNION ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6500 次 |
| 最近记录: |