繁体   English   中英

Oracle仅在第一个条件没有给出连接的情况下才尝试第二个条件

[英]Oracle try second condition only if first one gave nothing in join

我正在Oracle中寻找一种方法,例如, 如果第一个条件不匹配,则执行第二个条件 让我们来看一个例子。

我在查询中有此JOIN:

SELECT A.COL1, A.COL2, B.COL1, B.COL2 
FROM A
FULL JOIN (SELECT COL1, COL2 FROM B)
ON B.COL1 = A.COL1
       OR B.COL2 = A.COL2

您会看到,有了这个OR条件,我可以为同一个B对象创建两个连接。 我不想要那个。 我想要的是这样的:

  • 如果B.COL1 = A.COL1没有结果
  • 然后让我们尝试使用B.COL2 = A.COL2加入

如果B.COL1 = A.COL1则返回行。 或者,如果B.COL1 <> A.COL1B.COL2 = A.COL2也返回行。

SELECT A.COL1, A.COL2, B.COL1, B.COL2 
FROM A
FULL JOIN (SELECT COL1, COL2 FROM B) B
   ON (B.COL1 = A.COL1)
   OR (B.COL1 <> A.COL1 and B.COL2 = A.COL2) 

您需要在第二个过滤器中包括条件B.COL1 = A.COL1的否定。 B.COL1 <> A.COL1 ,这是B.COL1 <> A.COL1但是它不处理NULL值,因此您需要使用B.COL1 <> A.COL1 OR B.COL1 IS NULL OR A.COL1 IS NULL如下所示:

SELECT A.COL1, A.COL2, B.COL1, B.COL2 
FROM   A
       FULL JOIN (SELECT COL1, COL2 FROM B)
       ON (  B.COL1 = A.COL1
          OR ( ( B.COL1 <> A.COL1 OR B.COL1 IS NULL OR A.COL1 IS NULL )
               AND B.COL2 = A.COL2
             )
          )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM