执行以下存储过程时出现“未知表'matched_temp'”错误。
DELIMITER $$
DROP PROCEDURE IF EXISTS `apms`.`sp_partition_parkinout` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_partition_parkinout`()
BEGIN
DROP TEMPORARY TABLE IF EXISTS MATCHED_TEMP;
CREATE TEMPORARY TABLE MATCHED_TEMP AS
SELECT ID FROM CARDINOUT
WHERE (`State` = 2) AND
(ID NOT IN (SELECT ID FROM CARDINOUT_MATCHED))
LIMIT 200;
INSERT INTO CARDINOUT_MATCHED
SELECT * FROM CARDINOUT
WHERE ID IN (SELECT ID FROM MATCHED_TEMP);
DELETE FROM CARDINOUT
WHERE ID IN (SELECT ID FROM MATCHED_TEMP);
END $$
DELIMITER ;
我想定期执行它以将数据从cardinout移动到cardinout_matched。保持表cardinout尽可能小的目的,因为cardinout经常被查询。
还有其他选择可以实现吗?
由于 Botem
答案 0 :(得分:1)
CREATE TEMPORARY TABLE MATCHED_TEMP (
ID INT
);
INSERT INTO MATCHED_TEMP
SELECT ID FROM CARDINOUT
(...)