【问题标题】:Why it is not filtering? SQL QUERY "Where"为什么不过滤? SQL查询“在哪里”
【发布时间】:2021-11-25 13:46:44
【问题描述】:

在这段代码中,我想使用“where”关键字过滤只有 3 个 id 的“state_id”,但它不起作用,它显示了所有内容。

代码如下:

SELECT p.name as "patient", at.[RAPID3 Name], at.[DLQI Name], at.[HAQ-DI Name], p.ID, phy.Name, at.State_ID
FROM [ABV HUM Reporting].dbo.[Assessment Tool] as at
left join [ABV HUM Reporting].dbo.Patient as p on p.[ID] = at.[Owner (Patient)_Patient_ID]
left join [abv hum reporting].dbo.[Physician] as phy on phy.ID = p.Physician_ID
--left join [ABV HUM Reporting].dbo.[Physician] on p.Physician_ID = phy.Name
where at.State_ID=168 or at.State_ID = 165 or at.State_ID = 162
and at.[RAPID3 Name] is not null or at.[DLQI Name] is not null or [HAQ-DI Name] is not null Order by at.date DESC 

结果截图:

【问题讨论】:

  • 如果你混合使用andor,你一般应该使用括号
  • 您应该更加小心 OR - 最后两个 OR 实际上会使您的 ID 标准毫无用处。

标签: sql sql-server select where-clause


【解决方案1】:

运算符优先级在这里起作用。 (https://docs.microsoft.com/en-us/sql/t-sql/language-elements/operator-precedence-transact-sql?view=sql-server-ver15)

您可以使用括号强制 SQL Server 采用更高优先级的内容(或根据需要将内容组合在一起)。

where
      (at.State_ID=168 or at.State_ID = 165 or at.State_ID = 162)
  and (at.[RAPID3 Name] is not null or at.[DLQI Name] is not null or [HAQ-DI Name] is not null)

【讨论】:

    【解决方案2】:

    andor 具有更高的优先级,这导致条件不会像您(可能)期望的那样被评估。几个括号可以解决这个问题:

    where (at.State_ID=168 or 
           at.State_ID = 165 or 
           at.State_ID = 162
          )
          and 
          (at.[RAPID3 Name] is not null or 
           at.[DLQI Name] is not null or 
           [HAQ-DI Name] is not null
          )
    

    或者,您可以使用incoalesce 重写条件,这样会更简洁:

    where at.State_ID IN (168, 165, 162)
          AND
          COALESCE (at.[RAPID3 Name], at.[DLQI Name], [HAQ-DI Name]) IS NOT NULL
    

    【讨论】:

    • NEAT,非常感谢
    【解决方案3】:
     where (at.State_ID=168 or at.State_ID = 165 or at.State_ID = 162)
    and (at.[RAPID3 Name] is not null or at.[DLQI Name] is not null or [HAQ-DI Name] is not null )
    

    【讨论】:

      猜你喜欢
      • 2018-02-04
      • 2015-07-23
      • 2017-03-23
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      相关资源
      最近更新 更多