sql - Oracle SQL 条件连接

标签 sql oracle join

我有以下 SQL 语句:

select
    DOCUMENT.DOCUMENT_ID,
    (case
        when DOCUMENT.CLASSIFICATION_CODE is not null
        then DOCUMENT.CLASSIFICATION_CODE
        else TEMPLATE.CLASSIFICATION_CODE end) CLASSIFICATION_CODE,
    CLASSIFICATION.NAME CLASSIFICATION_NAME
from
    DOCUMENT,
    TEMPLATE,
    CLASSIFICATION
where
    DOCUMENT.TEMPLATE_ID = TEMPLATE.TEMPLATE_ID and
    DOCUMENT.CLASSIFICATION_CODE = CLASSIFICATION.CLASSIFICATION_CODE(+)

我想做的是:
if DOCUMENT.CLASSIFICATION_CODE IS NOT NULL THEN 
  DOCUMENT.CLASSIFICATION_CODE = CLASSIFICATION.CLASSIFICATION_CODE(+),
ELSE
  TEMPLATE.CLASSIFICATION_CODE = CLASSIFICATION.CLASSIFICATION_CODE(+)

这可能吗?

最佳答案

您可以使用 NVL或者更标准的COALESCE为了那个原因:

COALESCE(DOCUMENT.CLASSIFICATION_CODE, TEMPLATE.CLASSIFICATION_CODE)
      = CLASSIFICATION.CLASSIFICATION_CODE(+)

在 ANSI 语法中:
select
    DOCUMENT.DOCUMENT_ID,
    COALESCE(DOCUMENT.CLASSIFICATION_CODE, TEMPLATE.CLASSIFICATION_CODE) 
        CLASSIFICATION_CODE,
    CLASSIFICATION.NAME CLASSIFICATION_NAME
from
    DOCUMENT
inner join 
    TEMPLATE on DOCUMENT.TEMPLATE_ID = TEMPLATE.TEMPLATE_ID
left join
    CLASSIFICATION on
         COALESCE(DOCUMENT.CLASSIFICATION_CODE, TEMPLATE.CLASSIFICATION_CODE) 
       = CLASSIFICATION.CLASSIFICATION_CODE

关于sql - Oracle SQL 条件连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36847983/

相关文章:

sql - 如果两列之间的日期相交,在 Oracle 上创建唯一索引的最有效方法

MySQL 从有关系但没有连接的表中选择

sql - 将nil值分配给driver.Value会使driver.Value不等于nil

SQL - 检查订单日期是否在 7 月的第二个星期六之后

php - Mysql(全文?)搜索产品

sql - 在子选择中引用外部字段值?

oracle - SQL巨大的插入脚本

java - 使用java以表对象作为输入调用oracle存储过程

MySQL:通过排序加入同一张表

mysql - 带有 JOIN 的 SQL 返回所有组合而不是各自的匹配项