如何在一个查询中合并两个返回不同数据类型的SELECT语句?
解决UNION ALL类型不匹配问题
UNION ALL要求所有子查询返回的列数据类型必须一致,你的问题里name是TEXT类型,debits是JSON类型,因此触发类型不匹配报错。可以通过统一数据类型来实现合并查询,以下是两种常用方案:
方案1:将JSON转为TEXT类型
把debits字段转换为TEXT类型,和name的类型对齐,适合仅需字符串形式结果的场景:
(SELECT name FROM mytable WHERE grade= %s) UNION ALL (SELECT debits::text -- 强制转换为TEXT类型 FROM mytable WHERE balancesheet= %s);
也可以用cast(debits as text)替代debits::text,两者效果完全一致。
方案2:将TEXT转为JSON类型
把name字段转换为JSON类型,让结果统一为JSON格式,适合后续需要解析JSON结构的场景:
(SELECT to_json(name) -- 将TEXT转为JSON FROM mytable WHERE grade= %s) UNION ALL (SELECT debits FROM mytable WHERE balancesheet= %s);
选择哪种方案取决于你对结果的后续使用需求:如果只是做字符串展示或简单处理,选方案1;如果需要对结果做JSON解析、嵌套等操作,选方案2。
内容的提问来源于stack exchange,提问作者shadow
相关产品推荐
相关产品推荐

