错误合并内部连接内部的链接

时间:2014-10-14 14:37:08

标签: sql oracle case inner-join multiple-tables

实际上我有一个Oracle 10和MSSQL数据库,我使用这个查询:

SELECT F1.ID_ACTIVO, F1.DENOMINACION, F1.IMPACTO_TOTAL, F1.RIESGO_TOTAL, AIRR.ID_RANGO, SUM(IMPACTORESIDUAL), SUM(RIESGORESIDUAL) 
FROM (  SELECT AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.DENOMINACION, SUM(AITA.IMPACTO_TOTAL) AS IMPACTO_TOTAL, SUM(AITA.RIESGO_TOTAL) AS RIESGO_TOTAL 
        FROM PROCESOS A 
        INNER JOIN AGR_ACTIVO AA ON (AA.ID_TIPOACTIVO = 2 AND AA.ID_ACTIVO = A.ID_PROCESO) 
        INNER JOIN AGR_IMP_TOTAL_ACT AITA ON (AA.ID_TIPOACTIVO = AITA.ID_TIPOACTIVO AND AA.ID_ACTIVO = AITA.ID_ACTIVO)  
        GROUP BY AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.DENOMINACION) F1 
INNER JOIN AGR_IMP_RISK_REAL AIRR ON (F1.ID_TIPOACTIVO = AIRR.ID_TIPOACTIVO AND F1.ID_ACTIVO = AIRR.ID_ACTIVO) 
GROUP BY F1.ID_ACTIVO, F1.DENOMINACION, F1.IMPACTO_TOTAL, F1.RIESGO_TOTAL, AIRR.ID_RANGO 
ORDER BY F1.RIESGO_TOTAL 
ASC,F1.ID_ACTIVO, F1.DENOMINACION, AIRR.ID_RANGO

这将返回如下表格:

|ID_ACTIVO | DENOMINACION           | IMPACTO_TOTAL | RIESGO_TOTAL | ID_RANGO | column6 | column7|
|----------|------------------------|---------------|--------------|----------|---------|--------|
| 20845    |Consultoría de Seguridad|     15375     |    2464,375  |     1    |  46125  |7393,125|

此表格代表ID_TIPOACTIVO = 2的元素。现在我有更多元素ID_TIPOACTIVO,其值为1到14.所以我创建了以下查询但不起作用,我的问题是行INNER JOIN AGR_IMP_RISK_REAL AIRR ON (COALESCE(F1.ID_TIPOACTIVO,F2.ID_TIPOACTIVO) = AIRR.ID_TIPOACTIVO AND COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO) = AIRR.ID_ACTIVO)没有链接F1.ID_TIPOACTIVO和{{1}来自F1.ID_ACTIVO语句(我用**标记了这一行)。我怎么能解决这个问题? (注意,因为我必须在14个subquerys之后添加它。)

这是错误(在AquaData中,使用MSSQL中的数据库):

  
    

[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_TIPOACTIVO& #34;没有pudo     enlazar。

         

[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_TIPOACTIVO& #34;没有pudo     enlazar。

         

[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_ACTIVO& #34;没有pudo     enlazar。

         

[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_ACTIVO& #34;没有pudo     enlazar。

  

这是Oracle中的错误:

  
    

[错误]脚本行:1-19 ------------------------- ORA-00904:" F1"。 " ID_ACTIVO":无效标识符

  

以下是查询:

COALESCE()

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我希望这会有所帮助

查询1(与您的一样)

with 
f1 as (select 1 n from dual),
f2 as (select 1 m from dual),
agr_imp_risk_real as (select 1 k from dual)
select t1.* from f1, f2 inner join agr_imp_risk_real airr  on (coalesce(f1.n, f2.m) = coalesce(f2.m, airr.k));

输出:ORA-00904:" F1"。" N":无效标识符

查询2

with 
f1 as (select 1 n from dual),
f2 as (select 1 m from dual),
agr_imp_risk_real as (select 1 k from dual)
select f1.* from f1, f2, agr_imp_risk_real airr where coalesce(f1.n, f2.m) = coalesce(f2.m, airr.k);

查询结果:1

所以不要使用INNER JOIN关键字或不要同时使用逗号和关键字加入子查询(实际上,我不知道有关此问题的理论。我从来没有尝试过在一个查询中混合两种方法)