Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O acionador não reconhece a tabela (Acionador para dividir o conteúdo de NEW.values ​​em várias linhas para inserir em outra tabela)


se você está apenas tentando quebrar as strings, você pode apenas codificar o 1 e 2 assim e não há necessidade de pegar 1 e 2 na tabela de números, pois essa tabela está atualmente codificada para conter 1 e 2 de qualquer maneira.
SET @V = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 1), ' ', -1),
    @U = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', 2), ' ', -1);

sqlfiddle

mas então notei que você nem precisa chamar SUBSTRING_INDEX() duas vezes .. isso também funciona
    SET @V = SUBSTRING_INDEX(new.Vu, ' ', 1),
        @U = SUBSTRING_INDEX(new.Vu,' ', -1);

sqlfiddle

ATUALIZAÇÃO depois de ver seu comentário, vejo porque você queria criar a tabela numbers então seu gatilho seria algo assim. Primeiro você cria a tabela numbers que contém linhas com n valores de 1 a 10 (número máximo possível de campos para dividir em linhas). Em seguida, você seleciona numbers onde n valores são <=número de campos em seu número. Em seguida, aplique as funções SUBSTRING_INDEX() para obter o campo na posição 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 o gatilho em ação