2014-09-02 168 views
0

我收到的时候我试图执行这个sql查询DB2 SQLSTATE 42972错误

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子句无效。 LINE NUMBER = 31。 SQLSTATE = 42972

+1

不要过时隐与清洁的现代'join'语法连接。这可能会解决您的问题。一个简单的规则:只要在'from'子句中用逗号来表示“否”。 – 2014-09-02 20:22:05

+0

您是否可以确认'QUALITYISSUEFACT'和'QUALITYRESOULTIONFACT'表中是否存在'QUALITYISSUEFACT_ID'列? – 2014-09-02 20:25:15

+0

是的,它存在。 – 2014-09-02 20:27:44

回答

0

喜欢尝试以下内部连接:

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 
    ; 

看看是否有帮助

相关问题