[英]Oracle SQL How to execute the second condition only if the first one has not been accepted?
[英]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.COL1 <> A.COL1
但B.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.