2017-10-14 95 views
0

有人能告訴我爲什麼這段代碼不工作嗎?我一直在1號線得到錯誤和2插入一行不起作用

我想插入一行到PROBLEMTABLE表在CUSTLA表,其中CustCode不匹配在CUSTCATEGORY源表中的PK值的每一行。

第1行的錯誤不給我一個理由,但第2行的錯誤表明該列是不明確定義的。

INSERT INTO PROBLEMTABLE (problemid, source_rowid, source_table, filterid, datetime, action) 
    SELECT 
     PROBLEM_SEQ.NEXTVAL, ROWID, 'CUSTLA', 2, CURRENT_DATE, 'MODIFY' 
    FROM 
     CUSTLA U, CUSTCATEGORY Y 
    WHERE 
     U.CustCode != Y.CustCode; 

SELECT * FROM PROBLEMTABLE; 
+0

你能給我們提供錯誤的全文嗎? –

+0

描述已編輯@GiorgosBetsos –

+0

CUSTLA和CUSTCATEGORY都包含具有相同名稱的列,可能是列ROWID。在你的SELECT語句中,將表別名添加到兩個表中存在的列中,例如'SELECT U.ROWID ...' – Serge

回答

1

您沒有正確檢查CUSTLA表中沒有的記錄。試試這個查詢,而不是:

INSERT INTO PROBLEMTABLE (problemid, source_rowid, source_table, 
          filterid, datetime, action) 
    SELECT PROBLEM_SEQ.NEXTVAL, ROWID, 'CUSTLA', 
      2, CURRENT_DATE, 'MODIFY' 
    FROM CUSTLA U 
    WHERE NOT EXISTS (SELECT 1 FROM CUSTCATEGORY Y WHERE U.CustCode = Y.CustCode) 

你得到的錯誤是由於SELECT子句中指定的字段,在都存在CUSTLACUSTCATEGORY表。這被稱爲模棱兩可的領域,因爲RDBMS引擎無法決定選擇哪一個。

說明:您的查詢使用隱式CROSS JOIN來檢查不存在的記錄。您將以這種方式獲得大量冗餘記錄。