2017-10-14 59 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来检查不存在的记录。您将以这种方式获得大量冗余记录。