我有下面的oracle查询,我想把连接从where子句移到from子句
select
*
from
A, B, C
where
A.a (+)= B.a
AND A.b (+) = B.b
AND A.b = C.b;
所以我提出了以下问题
select
*
from
C,
B left join A on (B.a = A.a and B.b = A.b and C.b = A.b);
我想知道这两个查询在语义上是否相同,是否都会输出相同的结果
***编辑:尝试2
select
*
from
B left join A on (B.a = A.a and B.b = A.b)
inner join C on C.b = A.b;
3条答案
按热度按时间wlzqhblo1#
在旧的oracle join语法中
(+)
将应用于外部联接表的所有列。因此,在原始查询中,表a外部联接到表b,因为是
但是
AND a.b = c.b
在您的查询中,这仅仅是一个内部连接,因为它必须AND a.b (+) = c.b
对于工作的外部联接(在这种情况下,您可能需要a.b = c.b
,以便不交叉连接两个表)。所以你的问题可以归结为:
qco9c6ql2#
如果下面是你的工作查询,那么我必须说它没有做预期的事情。
它只不过是所有三个表的内部联接,因为最后一个条件使它成为a和c之间的内部联接。只有在a和c(以及非课程b)中都有可用数据时,它才会返回数据(内部连接)
为了得到准确的结果,只需要一个内部连接。
7hiiyaii3#
您可能打算将此查询作为: