满足条件时带限制的内部联接

voj3qocg  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(400)

我有一个问题,我必须添加额外的条件,以满足需要。
条件:如果[dd.datadefinitionvaluetext]=“pa”,那么查询应该只显示那些在[cs.clientsupporterremarks]中有值“b”的人。
我试着在内部连接中使用if语句,但是我不能正确地理解它。我必须编辑最后一个内部连接还是之前的连接?
谢谢你的建议。
代码:

SELECT 
Distinct 
        c.CSName 
        ,dd.DataDefinitionValueText
       ,cs.ClientSupporterIsPrimaryContact
       ,cs.ClientSupporterRemarks
       ,usr.UserEMail
       ,usr.UserName
FROM DB_Analysis a
INNER JOIN [dbo].[DB_Projects] pr ON
       a.AnalysisProjectID = pr.ProjectID
       AND pr.ProjectIsActive = 1
INNER JOIN DB_Clients c on
       c.ClientID = pr.ProjectClientID         
INNER JOIN [dbo].[DB_ClientSupporters] cs ON
       cs.ClientSupporterClientID = c.ClientID
INNER JOIN [dbo].[DB_Users] usr ON
       cs.ClientSupporterUserID = usr.UserID
INNER JOIN [dbo].[DB_DataDefinitions] dd ON
       cs.ClientSupporterRole = dd.DataDefinitionValueID 
       AND dd.DataDefinitionName = 'ClientSupporterRole'
WHERE c.ClientIsActive = 1
ecr0jaav

ecr0jaav1#

声明“if foo then bar”的条件表示当foo为false时,满足条件;当foo为true(或false)时,当bar为true时,满足条件,因此:

if Foo is true then Bar must be true

方法

WHERE ( NOT FOO  OR  BAR )

对于问题中的查询,这意味着:

WHERE c.ClientIsActive = 1
  AND ( dd.DataDefinitionValueTest <> "PA"
     OR dd.DataDefinitionValueTest IS NULL -- remove if column is NOT NULL
     OR cs.ClientSupporterRemarks = "B" )

对于问题中的查询,您还可以向 dd 加入,而不是加入 WHERE 条款,没有区别。

INNER JOIN [dbo].[DB_DataDefinitions] dd
        ON cs.ClientSupporterRole = dd.DataDefinitionValueID 
       AND dd.DataDefinitionName = 'ClientSupporterRole'
       AND ( dd.DataDefinitionValueTest <> "PA"
          OR dd.DataDefinitionValueTest IS NULL -- remove if column is NOT NULL
          OR cs.ClientSupporterRemarks = "B" )

相关问题