JOIN条件中的CASE参数和IN()运算符

时间:2016-07-28 17:49:09

标签: sql oracle join case

我正在尝试创建一个遵循以下逻辑的连接:

  

如果我们公司是原告,请加入以下角色类型   表:国防公司,国防检察官

     

如果我们公司是被告,请加入以下角色类型   表:原告公司,原告律师

到目前为止,我已将此代码编写在连接中,但它总是会为我尝试的每种语法生成错误:

WHERE

TRIAL.TRIAL_ID = OPPOSITION.TRIAL_ID
AND OPPOSITION.ROLE IN

CASE 
WHEN TRIAL.POSITION = 'Plaintiff' 
THEN  ('Defense Firm','Defense Attorney' )
WHEN TRIAL.POSITION = 'Defendant' 
THEN  ('Plaintiff Firm','Plaintiff Attorney')
END

我们目前正在运行Oracle(??)g。

这种连接逻辑是否可能?

编辑:

  • 修正了代码部分中的被告/原告混淆
  • 不确定我们使用的是哪个版本的Oracle。

1 个答案:

答案 0 :(得分:0)

您可以使用AND / OR逻辑和适当的括号分组来实现这一目标(如果我按照您的需要进行操作),例如:

WHERE TRIAL.TRIAL_ID = OPPOSITION.TRIAL_ID
AND (
  (TRIAL.POSITION = 'Plaintiff'
    AND OPPOSITION.ROLE IN ('Defense Firm', 'Defense Attorney')
  OR
  (TRIAL.POSITION = 'Defendant'
    AND OPPOSITION.ROLE IN ('Plaintiff Firm', 'Plaintiff Attorney')
)

虽然看起来它们应该是ANSI JOIN子句的一部分,而不是WHERE子句......