sql >> Databasteknik >  >> RDS >> Mysql

Utlösaren känner inte igen tabell (utlösaren för att dela upp innehållet i NEW.values ​​i flera rader för att infoga i en annan tabell)

om du bara försöker bryta ut strängarna kan du bara hårdkoda 1 och 2 där så här och det finns ingen anledning att ta tag i 1 och 2 i taltabellen eftersom den tabellen för närvarande är hårdkodad för att innehålla 1 och 2 ändå.

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

sqlfiddle

men sedan märkte jag att du inte ens behöver ringa SUBSTRING_INDEX() två gånger..detta fungerar också

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

sqlfiddle

UPPDATERA efter att ha sett din kommentar förstår jag varför du ville skapa tabell numbers så din utlösare skulle vara ungefär så här. Först skapar du tabell numbers som innehåller rader som har n värden från 1 till 10 (möjligt maximalt antal fält att dela upp i rader). Sedan väljer du från numbers där n värden är <=antal fält i ditt nummer. Använd sedan SUBSTRING_INDEX() funktioner för att få fältet på n position.

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 för att se triggern i aktion




  1. BESTÄLL EFTER alfabet först och följ sedan efter nummer

  2. Infoga i alla celler när poster är fler än en PHP

  3. Gemensamma vänner sql med join (Mysql)

  4. UnboundLocalError:lokal variabel 'cursor' som refereras till före tilldelning