2017-06-04 4 views
-1

hier ich habe Tabelle wie dieses"Trigger einfügen" einfügen Daten aus einer anderen Spalte

Ziel:

|id_dest | price | 
    |  1 |2000 | 
    |  2 |100 | 
    |  3 |1000 | 

Artikel:

|id_item | weight | id_dest |total(weight*destination.price) | 
    |  1 |  3 |  2 | 

der Auslöser

|id_item | weight | id_dest |sum(weight*destination.price) total | 
    |  1 |  3 |  2 |300 
machen sollte

wie die Abfrage Trigger sollte sein?

+1

Warum verwenden Sie keine generierte Spalte? https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html – Barmar

+0

SO ist kein freier Kodierungsdienst. Sie müssen versuchen, das Problem selbst zu lösen. Wenn es nicht funktioniert, poste, was du versucht hast, und wir helfen dir, es zu beheben. – Barmar

+0

Eine generierte Spalte funktioniert nicht, da nur Spalten aus derselben Zeile verwendet werden können. –

Antwort

0
CREATE TRIGGER trigger_name 
    BEFORE INSERT ON item 
    FOR EACH ROW 
BEGIN 
    UPDATE item 
    SET total = (SELECT d.price *, NEW.weight 
       FROM destination d 
       WHERE d.id_dest = NEW.id_dest) 
    WHERE id_item = NEW.id_item; 
END 
+0

Sie können die Tabelle, auf der Sie den Trigger definieren, nicht 'AKTUALISIEREN'. Aber das ist nicht nötig. Es besteht auch keine Notwendigkeit für ein JOIN. Es könnte einfach 'SET NEW.total = SELECT d.price * NEW.weight FROM Ziel d WHERE d.id_dest = NEW.id_dest;' sein. Aber Sie können das nur mit einem 'BEFORE INSERT'-Trigger tun. –

+0

Und wie ich in meinem Kommentar zu der Frage schrieb: Sie können nicht Daten aus einer anderen Tabelle für eine generierte Spalte verwenden. –

+0

@PaulSpiegel OK danke, ich habe meine Antwort unter Berücksichtigung Ihrer Einsichten aktualisiert – Alon

Verwandte Themen