У меня есть эта процедура, которая перебирает значения article
, выбирает tag1
и вставляет ее в таблицу article_tag
:
DELIMITER $$
CREATE PROCEDURE dt1()
BEGIN
DECLARE maxid INT;
DECLARE x INT;
DECLARE t VARCHAR(30);
DECLARE ntag1 int;
SET maxid = (SELECT MAX(id) FROM `article`);
SET x = (SELECT MIN(id) FROM `article`) ;
WHILE x<= maxid DO
SET t = (SELECT tag1 from `article` WHERE id=x);
SET ntag1 = (SELECT count(*) from `article_tag` WHERE tag=t);
IF ntag1 = 0
THEN
INSERT INTO `article_tag` (tag, slug, frequency) VALUES (t, t, 1);
ELSE
UPDATE `article_tag` SET frequency = frequency + 1 WHERE tag=t;
END IF;
SET x = x + 1;
END WHILE;
END$$
Этот отлично работает , когда в цикле while есть строки с id
, но когда между ними пропущены id
с (например, здесь )
Я получаю
Query Error: Error: ER_BAD_NULL_ERROR: Column 'tag' cannot be null
Мне интересно, как идиоматический способ справиться с такими пропущенными строками?