【问题标题】:Error Coalesce cant link inside Inner Join错误合并无法在内部联接中链接
【发布时间】:2014-10-14 14:37:08
【问题描述】:

实际上,我有一个使用此查询的 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_TIPOACTIVOF1.ID_ACTIVO 来自COALESCE() 语句(我用**标记了该行)。我该如何解决这个问题? (小心,因为我必须在 14 个子查询之后添加它)。

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

[错误] 脚本行:1-19 ------------------------- El identificador formado por varias partes "F1.ID_TIPOACTIVO" no se普多 恩拉扎尔。

[错误] 脚本行:1-19 ------------------------- El identificador formado por varias partes "F1.ID_TIPOACTIVO" no se普多 恩拉扎尔。

[错误] 脚本行:1-19 ------------------------- El identificador formado por varias partes "F1.ID_ACTIVO" no se普多 恩拉扎尔。

[错误] 脚本行:1-19 ------------------------- El identificador formado por varias partes "F1.ID_ACTIVO" no se普多 恩拉扎尔。

这就是 Oracle 中的错误:

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

这里是查询:

SELECT COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO), COALESCE(F1.NOMBRE,F2.DENOMINACION), COALESCE(F1.IMPACTO_TOTAL,F2.IMPACTO_TOTAL), COALESCE(F1.RIESGO_TOTAL,F2.RIESGO_TOTAL), AIRR.ID_RANGO, SUM(IMPACTORESIDUAL), SUM(RIESGORESIDUAL) 
FROM
//IF ID_TIPOACT=1
(   SELECT AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.NOMBRE, SUM(AITA.IMPACTO_TOTAL) AS IMPACTO_TOTAL, SUM(AITA.RIESGO_TOTAL) AS RIESGO_TOTAL 
            FROM PRODUCTOS A 
            INNER JOIN AGR_ACTIVO AA ON (AA.ID_TIPOACTIVO = 1 AND AA.ID_ACTIVO = A.ID_PRODUCTO) 
            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.NOMBRE) F1 , 
//IF ID_TIPOACT=2
        (   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) F2 
**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) 
GROUP BY COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO), COALESCE(F1.NOMBRE,F2.DENOMINACION), COALESCE(F1.IMPACTO_TOTAL,F2.IMPACTO_TOTAL), COALESCE(F1.RIESGO_TOTAL,F2.RIESGO_TOTAL), AIRR.ID_RANGO
ORDER BY COALESCE(F1.RIESGO_TOTAL,F2.RIESGO_TOTAL)
ASC,COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO), COALESCE(F1.NOMBRE,F2.DENOMINACION), AIRR.ID_RANGO

提前谢谢你。

【问题讨论】:

  • 发生了什么,你得到一个错误?如果是这样呢?
  • 是的,我收到以下错误:>[错误] 脚本行:1-19 ------------------------ - El identificador formado por varias partes "F1.ID_TIPOACTIVO" no se pudo enlazar。 >[错误] 脚本行:1-19 ------------------------- El identificador formado por varias partes "F1.ID_TIPOACTIVO" no se pudo enlazar . >[错误] 脚本行:1-19 ------------------------- El identificador formado por varias partes "F1.ID_ACTIVO" no se pudo enlazar . >[错误] 脚本行:1-19 ------------------------- El identificador formado por varias partes "F1.ID_ACTIVO" no se pudo enlazar .这是使用 MSSQL

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


【解决方案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 关键字或不要同时使用逗号和关键字来连接子查询(实际上,我不知道关于这个问题的理论。我从未尝试在一个查询中混合使用这两种方法)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2012-10-02
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多