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

如何在SQL子查询中隐藏列?新手SQL语法问题求助

问题解决:调整子查询结构满足过滤需求

你的查询报错核心原因是**NOT IN要求子查询必须返回单一列**,但当前子查询同时返回了Case.ID和计算后的DateAdd两列,导致语法错误。要保留日期过滤逻辑同时只返回Case.ID列,只需把日期计算逻辑移到子查询的WHERE子句中,而非SELECT列表里。

修改后的SQL如下:

select Case.ID from Case
where Case.ID not in 
(
    select distinct Case.ID
    from Transaction
    join Case on Case.ID = Transaction.CaseID
    where dateadd(year, 1, Transaction.Date) > '2022-01-15'
)

关键调整说明:

  • 子查询的SELECT仅保留Case.ID,满足NOT IN对单列的要求
  • 将原本定义的DateAdd计算直接写入WHERE条件,用dateadd(year, 1, Transaction.Date)替代别名,实现相同的日期过滤逻辑
  • 注意日期格式建议用标准的'YYYY-MM-DD'而非'YYYY.MM.DD',避免不同数据库的解析问题

如果你习惯用别名让逻辑更清晰,也可以给表添加别名简化代码:

select c.ID from Case c
where c.ID not in 
(
    select distinct c.ID
    from Transaction t
    join Case c on c.ID = t.CaseID
    where dateadd(year, 1, t.Date) > '2022-01-15'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:55:18