Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Trigger erkennt Tabelle nicht (Trigger zum Aufteilen des Inhalts von NEW.values ​​in mehrere Zeilen zum Einfügen in eine andere Tabelle)

Wenn Sie nur versuchen, die Zeichenfolgen aufzubrechen, können Sie die 1 und 2 dort einfach so fest codieren, und es ist nicht erforderlich, 1 und 2 in die Zahlentabelle zu greifen, da diese Tabelle derzeit sowieso fest codiert ist, um 1 und 2 zu enthalten.

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

sqlfiddle

aber dann ist mir aufgefallen, dass Sie SUBSTRING_INDEX() nicht einmal zweimal aufrufen müssen.. das funktioniert auch

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

sqlfiddle

AKTUALISIEREN Nachdem ich Ihren Kommentar gesehen habe, verstehe ich, warum Sie Tabellen-numbers erstellen wollten Ihr Trigger würde also etwa so aussehen. Zuerst erstellen Sie Tabellen numbers das Zeilen mit n Werten von 1 bis 10 enthält (mögliche maximale Anzahl von Feldern, die in Zeilen aufgeteilt werden können). Dann wählen Sie aus numbers aus wobei n Werte <=Anzahl der Felder in Ihrer Zahl sind. Wenden Sie dann SUBSTRING_INDEX()-Funktionen an, um das Feld an Position n zu erhalten.

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, um den Trigger in Aktion zu sehen