数据库
首页 > 数据库> > 在MySql中多次访问临时表

在MySql中多次访问临时表

作者:互联网

我试图使用临时表作为SELECT语句的中间结果持有者.问题是虽然我无法在其他查询语句中多次访问临时表,我希望这是可能的,即使临时表无用.

是否有替代MySql中的临时表,允许我提取我的SQL语句.

我不能使用存储过程(无法从公司使用的Web框架版本访问它们),我不想使用游标.

编辑:

好吧,我的代码看起来有点像这样:

临时表创建:

CREATE TEMPORARY TABLE dates_with_entries (
  seq  INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  datum VARCHAR(32)
);

INSERT INTO dates_with_entries (datum) SELECT datum AS Datum from project_times
    WHERE user_id = 20 GROUP BY datum ORDER BY datum desc LIMIT 13;

那么我使用临时表的代码看起来有点像这样(我把它简化为我遇到的问题..)

SELECT 
...
FROM (SELECT entrie_date AS datum FROM dates_with_entries ) AS sub_result
INNER JOIN project_times
    ON sub_result.datum = project_times.datum AND project_times.user_id = 20
LEFT JOIN works AS w ON project_times.work_id = w.id
LEFT JOIN sub_projects AS sp ON sp.id = w.sub_project_id
LEFT JOIN projects AS p ON p.id = sp.project_id
GROUP BY datum
UNION(
    SELECT
      ..
  FROM (SELECT entrie_date AS datum FROM dates_with_entries ) AS sub_result
  INNER JOIN project_times AS pt ON pt.datum = sub_result.datum
  INNER JOIN works AS w on w.id = pt.work_id
  INNER JOIN sub_projects AS sp on w.sub_project_id = sp.id
  INNER JOIN projects AS p ON sp.project_id = p.id
  WHERE pt.user_id = 20
);

这些数字稍后将被ruby替换,这仅用于测试SQL语句.

解决方法:

解决这个问题的一种方法是简单地创建一个“真实”表,而不是临时表.

临时表提供的优点:

>命名空间.您可以创建多个
具有相同名称的临时表
在单独的会议中.
>自动清理.完成后,您不需要显式删除表
它.当你结束你的会话时它会消失

如果#1对您至关重要,那么您可能需要坚持使用临时表.否则,如果一次只运行此程序的一个实例,或者您动态创建表名以使其唯一,我建议您为此表选择一个适当的唯一名称并将其创建为“真实”表,然后你完成后放弃它.

标签:mysql,temp-tables
来源: https://codeday.me/bug/20190518/1129350.html