首页 > 解决方案 > 使用 SQL 中的选择子查询结果从选择查询中过滤记录

问题描述

我有一个选择查询,我可以从中得到结果。我还有一张有一些记录的表。我希望我的第一个查询结果集应该过滤我从表中获取的记录。

主选择查询

select ri.pkResourceItemsID,r.locationTimeZone,ss.minBookingPeriod,r.fkBusinessUnitID,r.fkLocationId,r.floor from tblResourceItems ri WITH (NOLOCK)
inner join Enterprise.tblRooms r WITH (NOLOCK) on ri.pkResourceItemsID=r.roomID
inner join tblBusinessUnit bu WITH (NOLOCK) on r.fkBusinessUnitID=bu.pkBusinessUnitID 
inner join tblSiteSetup ss WITH (NOLOCK) on bu.pkBusinessUnitID=ss.fkBusinessUnitID 
where ri.active=1 
and ri.fkResourceID=1 
and r.fkresourceId=1 
and r.deliveryPoint=0 
and bu.deployment=1 
and bu.selfSelectRoom=0 
and bu.active=1 
and r.locationTimeZone = 'India Standard Time'

结果

在此处输入图像描述

第二张表

Select fkCondecoRoomID from SYNC.tblExternalRoomMaster where Active=1

结果

在此处输入图像描述

我添加了 AND 语句来过滤表结果,但它给了我一个错误。

and ri.pkResourceItemsID = (Select fkCondecoRoomID from SYNC.tblExternalRoomMaster where Active=1)

错误

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

标签: sqlsql-servertsql

解决方案


如果子查询可以返回多于 1 行,您只需要使用in而不是,这使得最后一部分查询类似于=

and ri.pkResourceItemsID in (Select fkCondecoRoomID from SYNC.tblExternalRoomMaster where Active=1)

推荐阅读