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

Trigger genkender ikke tabel (Trigger for at opdele indhold af NEW.values ​​i flere rækker for at indsætte i en anden tabel)

hvis du bare prøver at bryde strengene ud, kan du bare hardkode 1 og 2 derinde sådan her, og der er ingen grund til at få fat i 1 og 2 i taltabellen, da den tabel i øjeblikket er hardkodet til at indeholde 1 og 2 alligevel.

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

sqlfiddle

men så bemærkede jeg, at du ikke engang behøver at ringe til SUBSTRING_INDEX() to gange.. det virker også

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

sqlfiddle

OPDATERING efter at have set din kommentar, kan jeg se, hvorfor du ønskede at oprette tabel numbers så din trigger ville være noget som dette. Først opretter du tabel numbers der indeholder rækker, der har n værdier fra 1 til 10 (maksimalt antal felter, der kan opdeles i rækker). Derefter vælger du fra numbers hvor n værdier er <=antal felter i dit nummer. Anvend derefter SUBSTRING_INDEX() funktioner for at få feltet til 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 for at se trigger i aktion




  1. Omdiriger til startsiden efter login php

  2. ORA-06502:PL/SQL:numerisk eller værdifejl:tegnstrengbuffer for lille

  3. Sådan sletter du en MySQL-post efter et bestemt tidsrum

  4. 5 måder at returnere rækker, der indeholder små bogstaver i SQL Server