2017-10-14 3 views
0

Kann mir jemand sagen, warum dieser Code nicht funktioniert? Ich erhalte Fehler in Zeile 1 und 2.Einfügen einer Zeile funktioniert nicht

Ich mag für jede Zeile in der Tabelle CUSTLA eine Zeile in die PROBLEMTABLE Tabelle einzufügen, wo CustCode keinen PK-Wert in der CUSTCATEGORY Quellentabelle überein.

Der Fehler in Zeile 1 gibt mir keinen Grund, aber der Fehler in Zeile 2 besagt, dass die Spalte zweideutig definiert ist.

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

Können Sie uns den ganzen Text des Fehlers geben? –

+0

Beschreibung wurde bearbeitet @GiorgosBetsos –

+0

Beide Tabellen CUSTLA und CUSTCATEGORY enthalten eine Spalte mit dem gleichen Namen, vielleicht Spalte ROWID. Fügen Sie in Ihrer SELECT-Anweisung einen Tabellenalias zu der Spalte hinzu, die in beiden Tabellen vorhanden ist, zB 'SELECT U.ROWID ...' – Serge

Antwort

1

Du bist gerade in CUSTLA Tabelle nicht richtig für die nicht vorhandene Datensätze. Diese Abfrage statt:

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) 

Der Fehler, den Sie auf ein Feld in der SELECT-Klausel aufgrund erhalten ist, die beideCUSTLA und CUSTCATEGORY Tabellen in existiert. Dies wird als mehrdeutiges Feld bezeichnet, da die RDBMS-Engine nicht entscheiden kann, aus welcher sie auswählen soll.

Hinweis: Ihre Abfrage verwendet eine implizite CROSS JOIN, um nach nicht vorhandenen Datensätzen zu suchen. Sie werden auf diese Weise eine Menge redundanter Datensätze erhalten.

Verwandte Themen