我有一张表要填写数据。我正在构建一个查找表,我想要填充将包含的数据。查找表将具有大约1400行,因此标准多插入看起来似乎不正确。另外,如果可能的话,我想在没有PHP的情况下填充此表这是我的表格形式:
CREATE TABLE score_percentile_lookup (
id INT(11) NOT NULL AUTO_INCREMENT,
instance_score INT(11),
percentile DECIMAl(5, 2)
PRIMARY KEY(id)
);
基本上,要开始,实例分数需要是递增列表[0 .. 1400],百分位数可以为空白。 mysql是否支持语法来运行基本上类似于以下内容的插入:
INSERT into score_percentile_lookup (instance_score) VALUES (0), (1), ... (1400);
我可以使用PHP生成此列表,但我想知道它是否可能没有它。感谢任何帮助过的人。
答案 0 :(得分:1)
MySQL中没有固有的语法。
但是,您可以在存储的程序中使用循环结构:
DELIMITER ;;
CREATE PROCEDURE insert_ints(lbound INT, ubound INT, step INT UNSIGNED) BEGIN
PREPARE stmt FROM '
INSERT INTO score_percentile_lookup (instance_score) VALUES (?)
';
SET @acc := lbound;
WHILE @acc <= ubound DO
EXECUTE stmt USING @acc;
SET @acc := @acc + step;
END WHILE;
SET @acc := NULL;
DEALLOCATE PREPARE stmt;
END;;
DELIMITER ;
然后做:
CALL insert_ints(0,1400,1);
或者,如果您已经拥有包含此类数字范围的表格,则可以使用INSERT ... SELECT
:
INSERT INTO score_percentile_lookup (instance_score)
SELECT num FROM numbers WHERE num BETWEEN 0 AND 1400;
答案 1 :(得分:1)
改编自related question的优秀答案:
INSERT INTO score_percentile_lookup
(instance_score)
SELECT TOP 1401
(TWO_1.SeqValue + TWO_2.SeqValue + TWO_4.SeqValue + TWO_8.SeqValue + TWO_16.SeqValue + TWO_32.SeqValue + TWO_64.SeqValue + TWO_128.SeqValue + TWO_256.SeqValue + TWO_512.SeqValue + TWO_1024.SeqValue) SeqValue
FROM
(SELECT 0 SeqValue UNION ALL SELECT 1 SeqValue) TWO_1
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 2 SeqValue) TWO_2
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 4 SeqValue) TWO_4
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 8 SeqValue) TWO_8
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 16 SeqValue) TWO_16
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 32 SeqValue) TWO_32
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 64 SeqValue) TWO_64
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 128 SeqValue) TWO_128
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 256 SeqValue) TWO_256
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 512 SeqValue) TWO_512
CROSS JOIN (SELECT 0 SeqValue UNION ALL SELECT 1024 SeqValue) TWO_1024
ORDER BY SeqValue