sql >> Base de Datos >  >> RDS >> Mysql

Trigger no reconoce la tabla (Trigger para dividir el contenido de NEW.values ​​en varias filas para insertar en otra tabla)

si solo está tratando de dividir las cadenas, puede codificar el 1 y el 2 de esta manera y no es necesario tomar el 1 y el 2 en la tabla de números, ya que esa tabla está actualmente codificada para contener el 1 y el 2 de todos modos.

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

sqlfiddle

pero luego me di cuenta de que ni siquiera necesitas llamar a SUBSTRING_INDEX() dos veces... esto también funciona

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

sqlfiddle

ACTUALIZAR después de ver tu comentario, veo por qué querías crear la tabla numbers entonces su activador sería algo como esto. Primero crea la tabla numbers que contiene filas que tienen n valores del 1 al 10 (número máximo posible de campos para dividir en filas). Luego selecciona entre numbers donde n valores son <=número de campos en su número. Luego aplique las funciones SUBSTRING_INDEX() para obtener el campo en la posición 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 para ver el disparador en acción