【问题标题】:CASE Statment and IN() Operator in JOIN ConditionJOIN 条件中的 CASE 语句和 IN() 运算符
【发布时间】:2016-07-28 17:49:08
【问题描述】:

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

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

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

到目前为止,我已经在连接中编写了这段代码,但是对于我尝试过的每种语法,它总是会产生一个错误:

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。

【问题讨论】:

  • CASE 语句应该用在 select not in WHERE 子句中
  • @6ton - 您可以在 JOIN 或 WHERE 子句中使用 case 表达式;但是您只能将该表达式的单个结果与其他结果进行比较。你不能做 OP 正在尝试的事情......
  • 刚刚看到一些例子 - 从未见过它在 WHERE 子句中使用过。谢谢@AlexPoole
  • Oracle 13g?什么时候发布的?
  • 您用简单的英语描述的需求是有道理的。您在 WHERE 子句中写的内容没有意义。也就是说,当 TRIAL.POSITION = 'Plaintiff" 时, OPSITION.ROLE 应该在 ('Defense Firm', 'Defense Attorney')。你写的是 'PLAINTIFF...' 而不是 'DEFENSE'。请注意,Alex Poole 只是复制了什么你在查询中写的;在使用他的解决方案之前,你可能需要解决这个问题。

标签: sql oracle join case


【解决方案1】:

您可以使用 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 子句...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多