Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Bedingte Einfügung basierend auf LAST_INSERT_ID

Ihr zweiter Versuch war fast richtig. Sie müssen NULL-Werte mit IS NOT NULL überprüfen. Verwenden Sie also

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE)
SELECT @EVENT_ID, 'Notes', 'WO#89574' FROM DUAL
WHERE @EVENT_ID IS NOT NULL;  -- instead of != 

oder

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE)
SELECT t.* FROM (
    SELECT @EVENT_ID, 'Notes', 'WO#89574'
) t
WHERE @EVENT_ID IS NOT NULL;  -- instead of != 

Der erste kann nicht funktionieren:

-- THIS DOES NOT WORK
SELECT IF(@EVENT_ID != null, 
    INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) ...

weil die Syntax von IF ist

Die bedingte Ausführung von Anweisungen ist nur in gespeicherten Routinen . Die IF-Syntax von gespeicherten Routinen würde so etwas wie

erlauben
IF @EVENT_ID IS NOT NULL THEN
    INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) ...
END IF

Sie müssen diese beiden Syntaxversionen unterscheiden.