插入一行不起作用
问题描述:
有人能告诉我为什么这段代码不工作吗?我一直在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;
答
您没有正确检查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
来检查不存在的记录。您将以这种方式获得大量冗余记录。
你能给我们提供错误的全文吗? –
描述已编辑@GiorgosBetsos –
CUSTLA和CUSTCATEGORY都包含具有相同名称的列,可能是列ROWID。在你的SELECT语句中,将表别名添加到两个表中存在的列中,例如'SELECT U.ROWID ...' – Serge