【问题标题】:Filter records from select query using select subquery result in SQL使用 SQL 中的选择子查询结果从选择查询中过滤记录
【发布时间】:2021-07-22 08:14:55
【问题描述】:

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

主选择查询

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 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

【问题讨论】:

  • 错误是告诉你这里的问题,你不明白怎么办,我们可以尝试详细说明。另外,您为什么要针对 every 表发送 NOLOCK 提示?如果您真的“需要”对每个表使用它,然后更改批处理的隔离级别,但我建议阅读Bad habits : Putting NOLOCK everywhere。 (恕我直言,我怀疑您是否会像熟悉查询提示的人那样理解您遇到的错误。)
  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。

标签: sql sql-server tsql


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 2019-04-04
  • 1970-01-01
  • 2018-02-07
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2014-02-04
  • 1970-01-01
相关资源
最近更新 更多