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

MySQL技术问询:如何查询投票表中指定投票者的对应列名

解决投票选项查询的SQL方案

嘿,我来帮你搞定这个查询需求!首先得纠正个小笔误:你提到的数据库表是votes,但SQL里写成了poll,下面的方案我会用正确的表名来写。

方案一:使用CASE语句(适合固定少量选项)

这种方法直观简单,完美适配你当前只有A、B、C三个选项的场景:

SELECT
  CASE
    WHEN value_A = 1 THEN 'value_A'
    WHEN value_B = 1 THEN 'value_B'
    WHEN value_C = 1 THEN 'value_C'
    ELSE NULL -- 处理未选中任何选项的异常情况
  END AS entry_selected
FROM votes
WHERE id_voter = '11'

逻辑非常清晰:逐个检查每个投票选项列的值,找到值为1的列时直接返回对应的列名,完全匹配你的预期输出。

方案二:行转列查询(适合可扩展的场景)

如果以后投票选项可能新增,这种方法扩展性更强,不需要修改核心逻辑,只需要新增分支即可:

SELECT entry_selected
FROM (
  SELECT id_voter, 'value_A' AS entry_selected, value_A AS vote_value FROM votes
  UNION ALL
  SELECT id_voter, 'value_B' AS entry_selected, value_B AS vote_value FROM votes
  UNION ALL
  SELECT id_voter, 'value_C' AS entry_selected, value_C AS vote_value FROM votes
) AS unpivoted_votes
WHERE id_voter = '11' AND vote_value = 1

这个思路是先把每一列的投票数据转换成一行,再筛选出值为1的那条记录,就能得到对应的列名。如果以后新增value_D,只需要在子查询里加一条UNION ALL SELECT id_voter, 'value_D', value_D FROM votes就行,非常灵活。

小提醒

要确保业务逻辑里每个投票者只会有一个选项被设为1(单选场景),这样两种方法都会返回唯一结果。如果存在多选情况,方案二会返回所有选中的选项列名,方案一则只会返回第一个匹配到的列名,可以根据实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:12:59