插入行无效

时间:2017-10-14 04:44:32

标签: sql sql-insert

有人可以告诉我为什么这段代码不起作用?我一直在第1行和第2行收到错误。

我想在PROBLEMTABLE表中为CUSTLA表中的每一行插入一行,其中CustCodeCUSTCATEGORY源表中的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;

1 个答案:

答案 0 :(得分: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来检查不存在的记录。您将以这种方式获得大量冗余记录。