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

mysql unbekannte tabelle auslösen

Ich habe unten gezeigt, was in den Kommentaren zu der Frage gesagt wurde:

CREATE TRIGGER some_trigger AFTER UPDATE ON table_a
    FOR EACH ROW BEGIN
    DECLARE tname VARCHAR(20);
    IF (NEW.field_offer=1) THEN
       UPDATE `table_b` 
       SET STOCK = CASE NEW.field_state 
                   WHEN 0 THEN STOCK - 1 
                   WHEN 1 THEN STOCK + 1 
                   ELSE STOCK 
                   END
       WHERE ID=NEW.ref_field
       ;
    ELSEIF (NEW.field_offer=0) THEN
       UPDATE `table_c` 
       SET STOCK = CASE NEW.field_state 
                   WHEN 0 THEN STOCK - 1 
                   WHEN 1 THEN STOCK + 1 
                   ELSE STOCK 
                   END
       WHERE ID=NEW.ref_field
       ;
    END IF;
    ...

Beachten Sie, dass ich die Aktualisierungen von UPDATE ... JOIN geändert habe da MySQL Ihnen nicht erlaubt, die Daten der getriggerten Tabelle zu ändern; Während Sie eigentlich table_a nicht aktualisiert haben, hätte der JOIN für MySQL ausreichen können, um Einwände zu erheben ... und die Joins hätten jede Zeile in table_b/c aktualisiert die eine Übereinstimmung in table_a hatte , nicht nur table_a Zeilen, die sich auf die Werte in oder Zeile des Triggers beziehen.