Mysql
 sql >> Database >  >> RDS >> Mysql

Il trigger non riconosce la tabella (trigger per suddividere il contenuto di NEW.values ​​in più righe da inserire in un'altra tabella)

se stai solo cercando di spezzare le stringhe, puoi semplicemente codificare 1 e 2 in questo modo e non è necessario prendere 1 e 2 nella tabella dei numeri poiché quella tabella è attualmente codificata per contenere comunque 1 e 2.

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

sqlfiddle

ma poi ho notato che non hai nemmeno bisogno di chiamare SUBSTRING_INDEX() due volte... anche questo funziona

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

sqlfiddle

AGGIORNAMENTO dopo aver visto il tuo commento, capisco perché hai voluto creare la tabella numbers quindi il tuo trigger sarebbe qualcosa del genere. Per prima cosa crei la tabella numbers che contiene righe con n valori da 1 a 10 (possibile numero massimo di campi da suddividere in righe). Quindi seleziona da numbers dove n valori sono <=numero di campi nel tuo numero. Quindi applica le funzioni SUBSTRING_INDEX() per ottenere il campo in posizione 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 per vedere il trigger in azione