Mysql过程未按预期执行

时间:2019-06-26 16:29:29

标签: mysql sql

在执行此过程时,使用mysql 5.7:

arr_idx = np.concatenate((np.zeros(shape=(2, 1), dtype=bool), arr_idx), axis=1)
>>> arr_idx
array([[False, False,  True],
       [False,  True, False]])

我明白了

  

mysql>调用tres();
  查询正常,受影响的0行(3.49秒)

但是,当我对循环范围内的某些值执行INSERT时:

DELIMITER $$
CREATE PROCEDURE tres()
BEGIN
    DECLARE maxid INT;
    DECLARE x INT;
    SET maxid = 655;
    SET x=1;
    WHILE x<= maxid DO 
        INSERT INTO `forum_topicresponder` (topic_id, username, reply_id) SELECT p.topic_id, p.creator_name, p.id  FROM forum_post AS p  WHERE p.topic_id=x;
     SET  x = x + 1; 
     END WHILE;
END$$

我看到结果插入没有问题。

表模式:

 INSERT INTO `forum_topicresponder` (topic_id, username, reply_id) SELECT p.topic_id, p.creator_name, p.id  FROM forum_post AS p  WHERE p.topic_id=42;

CREATE TABLE `forum_topicresponder` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `topic_id` int(10) NOT NULL DEFAULT '0',
  `username` varchar(300) CHARACTER SET utf8mb4 NOT NULL DEFAULT 'na',
  `reply_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=latin1;

那么这里可能出什么问题了,我该如何解决?

2 个答案:

答案 0 :(得分:1)

您需要在过程中检查x的值,该值可能与forum_post表的topic_id不匹配。

如果topic_id不匹配,则没有数据将复制到forum_topicresponder表。

您需要设置x的正确值(从最小到最大)取决于forum_post表的topic_id

答案 1 :(得分:0)

为什么要为此使用循环?只要做:

 INSERT INTO `forum_topicresponder` (topic_id, username, reply_id)
     SELECT p.topic_id, p.creator_name, p.id
     FROM forum_post p
     WHERE p.topic_id <= 665;  -- or use a variable if you prefer