使用符号"*="将查询 Sybase 迁移到 Oracle



大家好,我在sybase中有这个符号为*=的查询,我在oracle中使用了LEFT OUTER JOIN,但如果正确的话,我就不使用了。

在sybase中查询:

select
right(( "00" +convert(varchar(2), cta_consol.cod_correo)) , 2) +
right(("000000000" + convert(varchar(11), cta_consol.num_cta_cte)), 9) 
from
t_cuenta_consolidada cta_consol,
t_cuenta_corriente   ctacte ,
t_empresa            empresa,
t_comuna             comuna,
t_comuna             comuna_CtaCte,
t_ciudad             ciudad,
t_ciudad             ciudad_CtaCte ,
t_cta_cte_param         param
where
empresa.ide              = cta_consol.ide_cliente  and
empresa.cod_comuna       = comuna.codigo           and
comuna.cod_ciudad        = ciudad.codigo           and
ctacte.cod_comuna        = comuna_CtaCte.codigo    and
comuna_CtaCte.cod_ciudad = ciudad_CtaCte.codigo    and
cta_consol.num_cta_cte   = ctacte.num_cta_cte      and
cta_consol.num_cta_cte   *= param.num_cta_cte

cta_consol.num_cta_cte*=param.num_cta _cte

查询迁移到oracle:

select 
SUBSTR(('00' || CAST(cta_consol.cod_correo AS VARCHAR2(2))),-2) ||
SUBSTR(('000000000' || CAST(cta_consol.num_cta_cte AS VARCHAR2(11))),-9) 
from
t_cuenta_consolidada cta_consol 
LEFT OUTER JOIN t_cta_cte_param param ON cta_consol.num_cta_cte = param.num_cta_cte, 
t_cuenta_corriente   ctacte, 
t_empresa empresa, 
t_comuna comuna, 
t_ciudad  ciudad
where
empresa.ide = cta_consol.ide_cliente AND 
empresa.cod_comuna  = comuna.codigo AND 
comuna.cod_ciudad  = ciudad.codigo AND 
ctacte.cod_comuna  = comuna.codigo AND 
comuna.cod_ciudad = ciudad.codigo AND 
cta_consol.num_cta_cte  = ctacte.num_cta_cte

左外JOIN t_cta_cte_param param ON cta_consol.num_cta_cte=param.num_cta _cte,

我比较了每个查询的注册量,结果不一样

您可以将现代ANSI联接语法与旧的专有Oracle联接语法混合使用,但顺序很重要。

做ANSI:通常更容易,也不那么令人困惑

select 
SUBSTR(('00' || CAST(cta_consol.cod_correo AS VARCHAR2(2))),-2) ||
SUBSTR(('000000000' || CAST(cta_consol.num_cta_cte AS VARCHAR2(11))),-9) 
from
t_cuenta_consolidada cta_consol 
LEFT JOIN t_cta_cte_param param ON cta_consol.num_cta_cte = param.num_cta_cte
JOIN t_cuenta_corriente ctacte ON cta_consol.num_cta_cte  = ctacte.num_cta_cte
JOIN t_comuna comuna ON ctacte.cod_comuna  = comuna.codigo
JOIN t_empresa empresa ON empresa.ide = cta_consol.ide_cliente AND empresa.cod_comuna  = comuna.codigo 
JOIN t_ciudad  ciudad ON comuna.cod_ciudad  = ciudad.codigo
WHERE ...

或者旧的Oracle风格:

select 
SUBSTR(('00' || CAST(cta_consol.cod_correo AS VARCHAR2(2))),-2) ||
SUBSTR(('000000000' || CAST(cta_consol.num_cta_cte AS VARCHAR2(11))),-9) 
from
t_cuenta_consolidada cta_consol,
t_cta_cte_param param, 
t_cuenta_corriente   ctacte, 
t_empresa empresa, 
t_comuna comuna, 
t_ciudad  ciudad
where
empresa.ide = cta_consol.ide_cliente AND 
empresa.cod_comuna  = comuna.codigo AND 
comuna.cod_ciudad  = ciudad.codigo AND 
ctacte.cod_comuna  = comuna.codigo AND 
comuna.cod_ciudad = ciudad.codigo AND 
cta_consol.num_cta_cte  = ctacte.num_cta_cte AND
cta_consol.num_cta_cte = param.num_cta_cte (+)

最新更新