You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL只读权限下,如何优雅查询值为True的列名?

如何查询PostgreSQL中唯一为True的布尔列名(只读权限场景)

针对你描述的表结构和规则(3个布尔列仅一个为True或全为False),这里提供两种优雅的只读查询方案:

方案1:使用CASE表达式(直观简洁)

利用表的规则依次判断各列状态,直接返回匹配的列名:

SELECT
  CASE
    WHEN column_a THEN 'column_a'
    WHEN column_b THEN 'column_b'
    WHEN column_c THEN 'column_c'
    ELSE NULL -- 全为False时可替换为''或其他默认值
  END AS true_column
FROM "table" -- 注意table是PostgreSQL关键字,需加双引号
WHERE user_id = 'u2';

这个方案逻辑清晰,无需依赖额外函数,完全适配只读权限,执行效率也很高。

方案2:使用UNNEST+数组(扩展性更好)

如果后续可能新增布尔列,这个方案只需修改数组内容即可,无需调整判断逻辑:

SELECT col_name
FROM (
  SELECT
    user_id,
    UNNEST(ARRAY['column_a', 'column_b', 'column_c']) AS col_name,
    UNNEST(ARRAY[column_a, column_b, column_c]) AS col_value
  FROM "table"
) t
WHERE user_id = 'u2' AND col_value = true;

当所有列都为False时,该查询会返回空结果集,你可以根据需求用COALESCE或LEFT JOIN调整为返回默认值。

内容的提问来源于stack exchange,提问作者nesiva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:25:21