我需要与日期表交叉连接,所以我使用了:
CREATE TEMPORARY TABLE IF NOT EXISTS myDates AS (
SELECT
CAST((SYSDATE()+INTERVAL (H+T+U) DAY) AS date) d
FROM ( SELECT 0 H
UNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300
) H CROSS JOIN ( SELECT 0 T
UNION ALL SELECT 10 UNION ALL SELECT 20 UNION ALL SELECT 30
UNION ALL SELECT 40 UNION ALL SELECT 50 UNION ALL SELECT 60
UNION ALL SELECT 70 UNION ALL SELECT 80 UNION ALL SELECT 90
) T CROSS JOIN ( SELECT 0 U
UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) U
WHERE
(SYSDATE()+INTERVAL (H+T+U) DAY) <= (SYSDATE()+INTERVAL 1 YEAR)
);
但出于某种原因,这会不断将日期附加到临时表 myDates
。为什么会这样?
编辑 #1:我无法在我的其他服务器上重现此内容。在问题服务器中,当我处理我的大查询时,我运行了这个片段。这可能是为什么吗?
编辑 #2:在我运行此命令时出现问题的服务器中:
CREATE TEMPORARY TABLE IF NOT EXISTS myDates AS (
SELECT
CAST((SYSDATE()+INTERVAL (H+T+U) DAY) AS date) d
FROM ( SELECT 0 H
UNION ALL SELECT 100 UNION ALL SELECT 200 UNION ALL SELECT 300
) H CROSS JOIN ( SELECT 0 T
UNION ALL SELECT 10 UNION ALL SELECT 20 UNION ALL SELECT 30
UNION ALL SELECT 40 UNION ALL SELECT 50 UNION ALL SELECT 60
UNION ALL SELECT 70 UNION ALL SELECT 80 UNION ALL SELECT 90
) T CROSS JOIN ( SELECT 0 U
UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) U
WHERE
(SYSDATE()+INTERVAL (H+T+U) DAY) <= (SYSDATE()+INTERVAL 1 YEAR)
);
SELECT COUNT(*) FROM myDates;
这次运行它,我得到 8738
,下一个 9104
。它不断附加它。什么?
最佳答案
所以它会在您每次运行查询时追加 366。 你有没有尝试过 删除表 myDates; 一旦你完成了 table ?这不是解决方案,但可以作为变通方法。
您也可以尝试修复包括所有表在内的数据库。 mysqlcheck --repair --all-databases 从命令行 sql,看看这是否有帮助。
关于mysql - creating a temporary table of dates mysteriously "appends"一遍又一遍的数据到临时表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532193/