有人可以告诉我为什么这段代码不起作用?我一直在第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 :(得分: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
子句中指定的字段引起的,该字段存在于 CUSTLA
和CUSTCATEGORY
表中。这被称为模糊字段,因为RDBMS引擎无法决定选择哪一个。
注意:您的查询使用隐式CROSS JOIN
来检查不存在的记录。您将以这种方式获得大量冗余记录。