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

如何在CASE语句中判断值是否存在于子查询的多列中

解决CASE语句中判断值是否存在于多列的问题

你遇到的报错原因很明确:IN子查询要求返回单列数据,但你的子查询同时返回了三列,数据库无法将单个值(比如1)和多列结果做匹配,所以抛出了"Only one expression can be specified in the select list when the subquery is not introduced with EXISTS"的错误。

下面分两种场景给出解决方案:

场景1:逐行判断当前行的三列中是否包含值1

这种情况不需要子查询,直接用OR连接列判断即可,写法简单高效:

SELECT
  CASE
    WHEN first_value = 1 OR second_value = 1 OR third_value = 1 THEN '当前行存在值1'
    ELSE '当前行不存在值1'
  END AS row_has_value
FROM table1;

场景2:判断整个表中是否存在任意一行的三列里包含值1

如果是要检查整个表中是否存在目标值,用EXISTS的写法如下:

SELECT
  CASE
    WHEN EXISTS (
      SELECT 1
      FROM table1
      WHERE first_value = 1 OR second_value = 1 OR third_value = 1
    ) THEN '表中存在值1'
    ELSE '表中不存在值1'
  END AS table_has_value;

EXISTS只关心子查询是否能返回至少一行数据,所以子查询里写SELECT 1就足够,不用返回具体列值,性能也更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:30:55