将连接从Oracle转换为ANSI表示法时Toad中的错误?

时间:2017-04-21 10:54:12

标签: oracle toad

当使用Toad将以旧Oracle表示法编写的外部联接的查询转换为ANSI表示法时,我遇到了一个问题:

如果我这样写:

select AGENTS.AG_AGCLE, AGENTS.AG_NOM, S01_SERVICES.SE_CODE, 
    S01_DEPART.DP_CODE, S01_DEPART.DP_NOM, CONGES.CG_CPANT, 
    S01_PERSO.PE_TEMPSW, MEDWORK.MK_VILLE, MEDWORK.MK_DOCTORNAME 
from S01_PERSO,S01_SERVICES,S01_DEPART,AGENTS,CONGES,MEDWORK 
where SE_DPCLE=DP_DPCLE 
and SE_SECLE=PE_SECLE 
and PE_AGCLE=AG_AGCLE 
and AG_AGCLE=CG_AGCLE(+) 
and AG_MKCLE=MK_MKCLE(+)
and PE_PECLE=25;

Toad将其转换为此,这是正确的:

SELECT AG_AGCLE, AG_NOM, SE_CODE, DP_CODE, DP_NOM, CG_CPANT, PE_TEMPSW, 
    MK_VILLE, MK_DOCTORNAME
FROM S01_PERSO
INNER JOIN AGENTS ON (PE_AGCLE = AG_AGCLE)
INNER JOIN S01_SERVICES ON (SE_SECLE = PE_SECLE)
INNER JOIN S01_DEPART ON (SE_DPCLE = DP_DPCLE)
LEFT OUTER JOIN CONGES ON (AG_AGCLE = CG_AGCLE)
LEFT OUTER JOIN MEDWORK ON (AG_MKCLE = MK_MKCLE)
WHERE PE_PECLE = 25;

然而,如果我这样写,这是相同的查询(我只是反过来写了一个连接条件):

select AGENTS.AG_AGCLE, AGENTS.AG_NOM, S01_SERVICES.SE_CODE, 
    S01_DEPART.DP_CODE, S01_DEPART.DP_NOM, CONGES.CG_CPANT, 
    S01_PERSO.PE_TEMPSW, MEDWORK.MK_VILLE, MEDWORK.MK_DOCTORNAME 
from S01_PERSO,S01_SERVICES,S01_DEPART,AGENTS,CONGES,MEDWORK 
where SE_DPCLE=DP_DPCLE 
and SE_SECLE=PE_SECLE 
and PE_AGCLE=AG_AGCLE 
and CG_AGCLE(+)=AG_AGCLE
and AG_MKCLE=MK_MKCLE(+)
and PE_PECLE=25;

Toad将其转换为:

SELECT AG_AGCLE, AG_NOM, SE_CODE, DP_CODE, DP_NOM, CG_CPANT, PE_TEMPSW, 
    MK_VILLE, MK_DOCTORNAME
FROM S01_PERSO
INNER JOIN AGENTS ON (PE_AGCLE = AG_AGCLE)
INNER JOIN S01_SERVICES ON (SE_SECLE = PE_SECLE)
INNER JOIN S01_DEPART ON (SE_DPCLE = DP_DPCLE)
LEFT OUTER JOIN MEDWORK ON (AG_MKCLE = MK_MKCLE)
RIGHT OUTER JOIN CONGES ON (CG_AGCLE = AG_AGCLE)
WHERE PE_PECLE = 25;

我在网上搜索过这个问题却一无所获,有没有人遇到过这个问题?这是一个错误,还是我错过了什么?

我在Windows 7 64位上使用Toad for Oracle Freeware 12.10.0.30,64位。

0 个答案:

没有答案