【问题标题】:MySql: how to create temp table by using dynamic select statement?MySql:如何使用动态选择语句创建临时表?
【发布时间】:2014-09-02 08:05:14
【问题描述】:

从标题中可以理解,我想使用动态选择语句创建一个临时表。这是我的代码:

 declare  strwhere varchar(30);
if hour(now()) >= 16 and minute(now()) >=30 then
    set strwhere = ' day(now()) +1 ';
else 
    set strwhere = '  day(now()) ';
end if;
set @query = concat("select  pc.customerid,
                    deliverytimespanid,
                    pc.id,
                    ca.districtid,
                    pc.status,
                    pc.orderid,
                    deliverydatetime
                from packages as pc
                inner join  customeraddresses as ca on ca.id = pc.addressid
                where pc.status = 1
                and day(pc.deliverydatetime) =",strwhere,"
                and month(pc.deliverydatetime) = month(now()) 
                and year(pc.deliverydatetime) = year(now()) ");

prepare resultset from @query;
execute resultset;
deallocate prepare resultset;
create temporary table if not exists table2 as (select * from resultset);

返回

结果集不存在。

我应该如何选择结果?

【问题讨论】:

    标签: mysql sql stored-procedures temp-tables


    【解决方案1】:

    使用SELECT 语句创建表。您也可以缩短 WHERE 子句。

    declare  strwhere varchar(30);
    if hour(now()) >= 16 and minute(now()) >=30 then
        set strwhere = ' CURDATE() + INTERVAL 1 DAY ';
    else 
        set strwhere = '  CURDATE() ';
    end if;
    set @query = concat("CREATE TEMPORARY TABLE table2 AS
                        SELECT  pc.customerid,
                        deliverytimespanid,
                        pc.id,
                        ca.districtid,
                        pc.status,
                        pc.orderid,
                        deliverydatetime
                    from packages as pc
                    inner join  customeraddresses as ca on ca.id = pc.addressid
                    where pc.status = 1
                    and pc.deliverydatetime =",strwhere,"
                    );
    
    prepare resultset from @query;
    execute resultset;
    deallocate prepare resultset;
    

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 2011-11-22
      • 2013-04-02
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多