我试图在 mysql 过程中创建一个临时表并从中选择结果。
这是一段SQL
DELIMITER $$
CREATE PROCEDURE `mydb`.`simulate_results` (currdate DATETIME, enddate DATETIME, idcam INT)
BEGIN
DECLARE MYVAR1,
MYVAR2,
MYVAR3,
IDX INT;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp (
`Id` INT NOT NULL AUTO_INCREMENT,
`Field1` INT NOT NULL,
`Field2` INT NOT NULL,
`Field3` INT NOT NULL, PRIMARY KEY (`Id`)) ENGINE=MEMORY;
INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (0,0,0);
INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (1,0,0);
SELECT Field1,Field2,Field3,Id INTO MYVAR1,MYVAR2,MYVAR3,IDXFROM tmp ORDER BY RAND() LIMIT 1;
SELECT MYVAR1; (...)
来自 SELECT INTO 语句的唯一变量是 IDX(主键)。其他的总是 NULL。
这段代码有问题吗?
最佳答案
您是否查看过您的临时表以查看其中挥之不去的数据类型?该过程完成后临时表仍会存在,如果您从同一 session 再次运行该过程,您将向现有临时表中写入新行。
我会在 CREATE TEMPORARY TABLE ...
之前添加 DROP TEMPORARY TABLE IF EXISTS tmp
以确保您没有旧数据。
关于MySQL过程临时表选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695375/