如何在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
相关产品推荐
相关产品推荐

