web-dev-qa-db-fra.com

Comment utiliser la gâchette pour définir la valeur en fonction du résultat de la requête

j'apprécierais n'importe quel exemple sur la manière de définir la valeur sur la ligne ajoutée en fonction des résultats de la requête de différentes tables.

quelque chose comme ça

delimiter |

CREATE TRIGGER trigger BEFORE INSERT ON table1
FOR EACH ROW
  BEGIN
    NEW.value = (select value from table2 where id=NEW.id)
    NEW.value2 = (select value2 from table2 where id=NEW.id)
  END;
|

delimiter ;
2
s.amitai

Cela semble fonctionner. J'exécuterais un SELECT pour récupérer les deux valeurs

Suggestion n ° 1

delimiter |

CREATE TRIGGER trigger BEFORE INSERT ON table1
FOR EACH ROW
  BEGIN
    select value,value2
    INTO NEW.value,NEW.value2
    from table2 where id=NEW.id;
  END;
|

delimiter ;

Suggestion n ° 2

Si le value et value2 Sont de type de données INT, procédez comme suit

delimiter |

CREATE TRIGGER trigger BEFORE INSERT ON table1
FOR EACH ROW
  BEGIN
    DECLARE v1,v2 INT;

    select value,value2 INTO v1,v2
    from table2 where id=NEW.id;

    NEW.value  = v1;
    NEW.value2 = v2;
  END;
|

delimiter ;

ou do DECLARE v1,v2 VARCHAR(45); ou quel que soit le type de données approprié

3
RolandoMySQLDBA

Essayez ceci sur 5.7 +,

delimiter |

CREATE TRIGGER trigger BEFORE INSERT ON table1
FOR EACH ROW
  BEGIN
    DECLARE v1,v2 INT;

    select value,value2 INTO v1,v2
    from table2 where id=NEW.id;

    SET NEW.value  = v1;
    SET NEW.value2 = v2;
  END;
|

delimiter ;
0
Silent Spectator