我遇到了旧的 oracle 代码并且不太了解 (+) 运算符的机制。最简单的情况
SELECT *
FROM A, B
WHERE A.COL1 = B.COL1(+)
为了理解,它很容易转换为
SELECT *
FROM A
LEFT JOIN B ON A.COL1 = B.COL1
加入多个列时,查询
SELECT *
FROM A, B
WHERE A.COL1 = B.COL1(+)
AND A.COL2 = B.COL2(+)
转换成
SELECT *
FROM A
LEFT JOIN B ON A.COL1 = B.COL1
AND A.COL2 = B.COL2
当并非所有列都用运算符(+)标记时,如何理解以下查询?
SELECT *
FROM A, B
WHERE A.COL1 = B.COL1(+)
AND A.COL2 = B.COL2
在此查询中是否会考虑 (+)?在我对一个小样本的实验中,事实证明 (+) 被忽略了,可以解释为完全内部连接。但肯定不能理解为:
SELECT *
FROM A, B
WHERE (A.COL1 = B.COL1 OR B.COL1 IS NULL)
AND A.COL2 = B.COL2
引用文档:
也就是说,在以下查询中:
如果不是所有列都标有 (+) 运算符,应该理解为:
INNER JOIN。