首页 > 解决方案 > Msg 116, Level 16, State 1, Line 2 当子查询没有用 EXISTS 引入时,选择列表中只能指定一个表达式

问题描述

当我尝试运行此代码时收到此错误消息

select *
from Folio_Guest
where FolioID = (
    select *
    from Folio
    where ArrivalDate between '20190101' and '20210901'
)

标签: sqlsql-servertsql

解决方案


子查询最多需要返回一行和一列。也许你打算这样:

select fg.*
from Folio_Guest fg
where fg.FolioID in (select f.folioID
                     from Folio f
                     where ArrivalDate between '20190101' and '20210901'
                    );

重要的变化是:

  • 子查询仅返回一列,即应与 匹配的一列folioID
  • 如果合适,比较使用in而不是=匹配多行。

推荐阅读