Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le déclencheur ne reconnaît pas la table (déclencheur pour diviser le contenu de NEW.values ​​en plusieurs lignes à insérer dans une autre table)

si vous essayez simplement de séparer les chaînes, vous pouvez simplement coder en dur les 1 et 2 comme ceci et il n'est pas nécessaire de saisir 1 et 2 dans la table des nombres puisque cette table est actuellement codée en dur pour contenir 1 et 2 de toute façon.

SET @V = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 1), ' ', -1),
    @U = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 2), ' ', -1);

sqlfiddle

mais ensuite j'ai remarqué que vous n'avez même pas besoin d'appeler SUBSTRING_INDEX() deux fois..cela fonctionne aussi

    SET @V = SUBSTRING_INDEX(new.Vu, ' ', 1),
        @U = SUBSTRING_INDEX(new.Vu,' ', -1);

sqlfiddle

MISE À JOUR après avoir vu votre commentaire, je vois pourquoi vous vouliez créer un tableau numbers donc votre déclencheur serait quelque chose comme ça. D'abord, vous créez une table numbers qui contient des lignes qui ont n valeurs de 1 à 10 (nombre maximum possible de champs à décomposer en lignes). Ensuite, vous sélectionnez parmi les numbers où n valeurs sont <=nombre de champs dans votre numéro. Appliquez ensuite les fonctions SUBSTRING_INDEX() pour obtenir le champ à la position n.

create table numbers 
select 1 as n 
union select 2 
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 10;

CREATE TRIGGER `edit2` AFTER INSERT 
ON `table1` 
FOR EACH ROW BEGIN 

    INSERT INTO table2 (number,player,team,position)
    SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.number,' ',n),' ',-1) as number,
    NEW.player as player,
    SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.team,', ',n),', ',-1) as team,
    SUBSTRING_INDEX(SUBSTRING_INDEX(NEW.position,' ',n),' ',-1) as position
    FROM
    numbers n
    WHERE LENGTH(NEW.number)
             - LENGTH(REPLACE(NEW.number,' ',''))
             + 1 >= n.n;

END

sqlfiddle pour voir le déclencheur en action