【问题标题】:db2 sqlstate 42972 errordb2 sqlstate 42972 错误
【发布时间】:2014-09-02 20:20:06
【问题描述】:

当我尝试执行此 sql 查询时遇到此错误

INSERT INTO
            AGG_QUALITY
    SELECT
            QIF.DATEDM_ID, 
            'Status' AS BREAKDOWN_TYPE, 
            HCR.VALUE, 
            QIF.SCANDEFINITION_ID, 
            QIF.QUALITYISSUE_VALUE, 
            COUNT(QIF.QUALITYISSUEFACT_ID), 
            COUNT(QRF.QUALITYRESOLUTIONFACT_ID)

    FROM
            QUALITYISSUEFACT QIF,
            HUBCODERECORD HCR,
            ITEMSTATUS ITS
    LEFT JOIN
            QUALITYRESOLUTIONFACT QRF
    ON
            QIF.QUALITYISSUEFACT_ID = QRF.QUALITYISSUEFACT_ID
    WHERE
            QIF.DATEDM_ID > startDateDMId 
            AND     QIF.DATEDM_ID <= endDateDMId    
            AND HCR.CODE = ITS.H_STATUS_TYPE
            AND QIF.DIMENSION_ROM_PK = ITS.ITEMMASTER_ID
    GROUP BY
            QIF.DATEDM_ID, HCR.VALUE, QIF.SCANDEFINITION_ID, QIF.QUALITYISSUE_VALUE
    ;

DB21034E 该命令被作为 SQL 语句处理,因为它不是 有效的命令行处理器命令。在 SQL 处理期间,它返回: SQL0338N 与 JOIN 运算符或在 MERGE 语句中关联的 ON 子句 无效。第 31 行。 SQLSTATE=42972

【问题讨论】:

  • 不要使用干净的现代join 语法进行过时的隐式连接。这可能会解决你的问题。一个简单的规则:在from 子句中对逗号说“不”。
  • 您能否确认QUALITYISSUEFACT_ID 列同时存在于QUALITYISSUEFACTQUALITYRESOULTIONFACT 表中?

标签: java sql db2


【解决方案1】:

试试下面的内部连接:

INSERT INTO
            AGG_QUALITY
    SELECT
            QIF.DATEDM_ID, 
            'Status' AS BREAKDOWN_TYPE, 
            HCR.VALUE, 
            QIF.SCANDEFINITION_ID, 
            QIF.QUALITYISSUE_VALUE, 
            COUNT(QIF.QUALITYISSUEFACT_ID), 
            COUNT(QRF.QUALITYRESOLUTIONFACT_ID)

    FROM
            QUALITYISSUEFACT QIF
            INNER JOIN
            HUBCODERECORD HCR
            ON QIF.DIMENSION_ROM_PK = ITS.ITEMMASTER_ID
            INNER JOIN
            ITEMSTATUS ITS
            ON QIF.DIMENSION_ROM_PK = ITS.ITEMMASTER_ID
    LEFT JOIN
            QUALITYRESOLUTIONFACT QRF
    ON
            QIF.QUALITYISSUEFACT_ID = QRF.QUALITYISSUEFACT_ID
    WHERE
            QIF.DATEDM_ID > startDateDMId 
            AND     QIF.DATEDM_ID <= endDateDMId    
    GROUP BY
            QIF.DATEDM_ID, HCR.VALUE, QIF.SCANDEFINITION_ID, QIF.QUALITYISSUE_VALUE
    ;

看看有没有帮助

【讨论】:

    【解决方案2】:

    这里有同样的错误。 (注意,我的 Table1 没有行)

    在我这边,我可以通过将附加的(逗号分隔的)table2 更改为 REAL 内连接来解决它。

    示例来自

    select xxx from Table1 t1, Table2 t2 
    where (t2.col1 = t1.col1) and (t1.col2 = "whatever")
    

    select xxx from Table1 t1
    INNER JOIN Table2 t2 ON (t2.col1 = t1.col1)
    where (t1.col2 = "whatever")
    

    希望这对其他人有所帮助。 (DB2 9.7 出现问题)

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多