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

SQLite中NOT IN子查询返回2列预期1列的问题咨询

解决SQLite中NOT IN子查询多列报错的问题

嘿,这个报错的原因其实很直白——你给NOT IN的子查询返回了两列(third_party_id和effeciency_rating),但NOT IN只能接受单列值来和主查询的third_party_id做匹配,这就触发了sub-select returns 2 columns - expected 1的错误。

修正方案1:精简子查询返回列

直接把子查询里的返回列改成只保留需要匹配的third_party_id就行,这样就能满足NOT IN的要求:

SELECT * 
FROM Studio 
WHERE third_party_id NOT IN ( 
    SELECT third_party_id  -- 仅返回需要匹配的单列
    FROM Staff 
    WHERE Staff.third_party_id = Studio.third_party_id AND 
          Staff.effeciency_rating < 0.7 
);

更推荐的方案:用NOT EXISTS替代NOT IN

虽然上面的代码能解决问题,但我更推荐用NOT EXISTS来实现同样的逻辑,原因有两个:

  1. NOT EXISTS不需要关心子查询返回什么列(通常写SELECT 1就行),逻辑更清晰;
  2. 避免NOT IN处理NULL值时的坑:如果子查询的third_party_id存在NULL,NOT IN会直接返回空结果,而NOT EXISTS的行为更符合预期。

对应的代码如下:

SELECT s.* 
FROM Studio s
WHERE NOT EXISTS (
    SELECT 1  -- 这里返回任意列都不影响结果
    FROM Staff st
    WHERE st.third_party_id = s.third_party_id
      AND st.effeciency_rating < 0.7
);

这个查询的逻辑是:找出所有没有雇佣效率评分低于0.7的员工的工作室,和你原本的需求完全一致,同时更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:55:45