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

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

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

  1. SELECT
  2. Distinct
  3. c.CSName
  4. ,dd.DataDefinitionValueText
  5. ,cs.ClientSupporterIsPrimaryContact
  6. ,cs.ClientSupporterRemarks
  7. ,usr.UserEMail
  8. ,usr.UserName
  9. FROM DB_Analysis a
  10. INNER JOIN [dbo].[DB_Projects] pr ON
  11. a.AnalysisProjectID = pr.ProjectID
  12. AND pr.ProjectIsActive = 1
  13. INNER JOIN DB_Clients c on
  14. c.ClientID = pr.ProjectClientID
  15. INNER JOIN [dbo].[DB_ClientSupporters] cs ON
  16. cs.ClientSupporterClientID = c.ClientID
  17. INNER JOIN [dbo].[DB_Users] usr ON
  18. cs.ClientSupporterUserID = usr.UserID
  19. INNER JOIN [dbo].[DB_DataDefinitions] dd ON
  20. cs.ClientSupporterRole = dd.DataDefinitionValueID
  21. AND dd.DataDefinitionName = 'ClientSupporterRole'
  22. WHERE c.ClientIsActive = 1
ecr0jaav

ecr0jaav1#

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

  1. if Foo is true then Bar must be true

方法

  1. WHERE ( NOT FOO OR BAR )

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

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

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

  1. INNER JOIN [dbo].[DB_DataDefinitions] dd
  2. ON cs.ClientSupporterRole = dd.DataDefinitionValueID
  3. AND dd.DataDefinitionName = 'ClientSupporterRole'
  4. AND ( dd.DataDefinitionValueTest <> "PA"
  5. OR dd.DataDefinitionValueTest IS NULL -- remove if column is NOT NULL
  6. OR cs.ClientSupporterRemarks = "B" )
展开查看全部

相关问题