寻求跨PostgreSQL与SQL Server查询布尔列是否含TRUE值的通用SQL方案
跨PostgreSQL和SQL Server的兼容查询方案
不需要修改表结构,直接用EXISTS子查询就能实现跨库兼容,而且性能比SUM写法更优(找到第一条符合条件的记录就会停止查询,无需遍历所有行):
SELECT EXISTS ( SELECT 1 FROM entity WHERE correlation_id = 123 AND boolean_column = TRUE ) AS has_true_value;
兼容逻辑说明
- PostgreSQL和SQL Server均原生支持
EXISTS语法 - 布尔值判断
boolean_column = TRUE在两个数据库中都有效:PostgreSQL原生支持布尔类型;SQL Server的BIT类型会自动隐式转换,1对应TRUE、0对应FALSE - 如果
boolean_column存在NULL值,该查询会自动忽略这类行(NULL = TRUE的结果为NULL,不会被选中),和你原查询的逻辑完全一致(原查询中NULL会被COALESCE转为0,不影响最终判断)
原查询报错原因
你原查询里的<>是HTML转义字符,在SQL Server中直接执行会被解析为<和>两个独立符号,从而触发语法错误。即便换成正确的<>,SUM聚合的写法性能也远不如EXISTS,完全没必要做全量行的数值计算。
内容的提问来源于stack exchange,提问作者raho
相关产品推荐
相关产品推荐

