MySQL:重复插入到表中
给定一个图书编号id和图书份数,我希望在表中插入与图书份数相同的行数。这是我的非工作解决方案:MySQL:重复插入到表中,mysql,while-loop,Mysql,While Loop,给定一个图书编号id和图书份数,我希望在表中插入与图书份数相同的行数。这是我的非工作解决方案: DROP PROCEDURE IF EXISTS insert_into_book_copy_table; CREATE PROCEDURE insert_into_book_copy_table (IN in_book_id INT, IN in_num INT) BEGIN SET @I
DROP PROCEDURE IF EXISTS insert_into_book_copy_table;
CREATE PROCEDURE insert_into_book_copy_table (IN in_book_id INT,
IN in_num INT)
BEGIN
SET @I = 1;
SET @ACQUIRED = CURRENT_TIMESTAMP;
WHILE I <= in_num DO
INSERT INTO book_copy (book_id, acquired) # The table has an
VALUES (in_book_id, @ACQUIRED); # auto-increment field
# which I didn't list here
SET @I = @I + 1;
END WHILE;
END$$
还有更好的编码方法吗?试试这个,作为一条SQL语句:-
INSERT INTO book_copy (book_id, acquired)
SELECT a.i+b.i*10+c.i*100 + 1, $BookId, NOW()
FROM integers a, integers b, integers c
WHERE a.i+b.i*10+c.i*100 < $NumberToInsert
插入书本副本(书本id,已获取)
选择a.i+b.i*10+c.i*100+1,$BookId,NOW()
从整数a,整数b,整数c
其中a.i+b.i*10+c.i*100<$NumberToInsert
依赖于一个整数表,该表有一个10行的单列(称为i),值为0到9。将其自身连接两次可以得到从0到999的所有数字(可以很容易地扩展),因此可以在一个语句中插入多达1000本书
编辑-如果不想创建整数表,则可以对返回常量的两个子查询执行相同的操作:-
INSERT INTO book_copy (book_id, acquired)
SELECT a.i+b.i*10+c.i*100 + 1, $BookId, NOW()
FROM (SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) a,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) b,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) c
WHERE a.i+b.i*10+c.i*100 < $NumberToInsert
插入书本副本(书本id,已获取)
选择a.i+b.i*10+c.i*100+1,$BookId,NOW()
从(选择0作为i联合选择1作为i联合选择2作为i联合选择3作为i联合选择4作为i联合选择5作为i联合选择6作为i联合选择7作为i联合选择8作为i联合选择9作为i)a,
(选择0作为i联合选择1作为i联合选择2作为i联合选择3作为i联合选择4作为i联合选择5作为i联合选择6作为i联合选择7作为i联合选择8作为i联合选择9作为i)b,
(选择0作为i联合选择1作为i联合选择2作为i联合选择3作为i联合选择4作为i联合选择5作为i联合选择6作为i联合选择7作为i联合选择8作为i联合选择9作为i)c
其中a.i+b.i*10+c.i*100<$NumberToInsert
您会遇到什么错误?打字错误?而我,哦,是的,就是这样。我忽略了I。但是你认为这是一种很好的编码方式吗?
INSERT INTO book_copy (book_id, acquired)
SELECT a.i+b.i*10+c.i*100 + 1, $BookId, NOW()
FROM (SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) a,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) b,
(SELECT 0 AS i UNION SELECT 1 AS i UNION SELECT 2 AS i UNION SELECT 3 AS i UNION SELECT 4 AS i UNION SELECT 5 AS i UNION SELECT 6 AS i UNION SELECT 7 AS i UNION SELECT 8 AS i UNION SELECT 9 AS i ) c
WHERE a.i+b.i*10+c.i*100 < $NumberToInsert