Триггер не распознает таблицу (Trigger для разбиения содержимого NEW.values ​​на несколько строк для вставки в другую таблицу)

Код ошибки: 1109. Неизвестные номера таблиц в списке полей

Почему мой код считает, что нет номеров таблиц и как их исправить?

И если возможно, ответьте на вопрос, зачем использовать случай с триггерами?

Таблица PS Numbers Я использую сочетание с sunstring_index, поэтому из таблиц, где в некоторых полях столбца есть два слова, я мог бы разбить их на две строки

Может быть, есть достаточный путь?

drop schema exp; create database exp; use exp; create table IDVU ( `ID` int(8) unsigned not null auto_increment , `VU` varchar(45) not null, PRIMARY KEY (`id`), KEY `ix_VU` (`VU`) )ENGINE = InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; create table sep ( ID1 int(8) unsigned NOT NULL primary key auto_increment, ID2 int(8) unsigned not null, V varchar(45) not null, U varchar(45) not null, KEY `ix_ID2` (`ID2`), CONSTRAINT `ID_IDVU_SEP` FOREIGN KEY (`ID2`) REFERENCES `IDVU` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE = InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; create table numbers select 1 n union all select 2; delimiter $$ CREATE TRIGGER `edit` AFTER INSERT ON `idvu` FOR EACH ROW BEGIN IF new.VU like '% %' THEN SET @V = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', numbers.n), ' ', -1), @U = SUBSTRING_INDEX(SUBSTRING_INDEX(new.Vu, ' ', numbers.n), ' ', -1); else SET @V = 'NEW',@U = 'NEW'; END IF; INSERT INTO sep (ID2,V, U) VALUES (new.ID,@V, @U); END$$ delimiter ; select * from idvu order by ID; select * from sep order by ID1; insert into iDVU value (2,'Dd Rr'); 

UPDATE: OP хочет создать триггер AFTER INSERT чтобы разбить содержимое новых значений, вставленных в table1 в разные строки и вставить их в table2 .

 Table1 Number Player Team Position 1 Jan Ho Team 1 C 2 Mike Dog Team 3 LW 4 8 Slim Dre Team 4, Team 1 GD 6 Mad Dog Team 2 D 

разбить его на строки и вставить в table2 как table2 ниже

 Table2 Number Player Team Position 1 Jan Ho Team 1 C 2 Mike Dog Team 3 LW 4 Slim Dre Team 4 G 8 Slim Dre Team 1 D 6 Mad Dog Team 2 D 

    если вы просто пытаетесь вырвать строки, вы можете просто скопировать 1 и 2 там, как это, и нет необходимости захватывать таблицу 1 и 2 в числах, так как эта таблица в настоящее время жестко закодирована, чтобы содержать 1 и 2 в любом случае.

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

    sqlfiddle

    но потом я заметил, что вам даже не нужно дважды звонить SUBSTRING_INDEX (). Это тоже работает

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

    sqlfiddle

    UPDATE после просмотра вашего комментария, я понимаю, почему вы хотели создать numbers таблиц, чтобы ваш триггер был чем-то вроде этого. Сначала вы создаете numbers таблиц, содержащие строки, которые имеют n значений от 1 до 10 (возможно максимальное количество полей для разбиения на строки). Затем вы выбираете из numbers где n значений <= количество полей в вашем номере. Затем примените функции SUBSTRING_INDEX (), чтобы получить поле в 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 >= nn; END 

    sqlfiddle увидеть триггер в действии