2014-09-02 74 views
1

正如你可以從標題理解的,我想通過使用動態選擇語句來創建臨時表。這裏是我的代碼:MySql:如何使用動態select語句創建臨時表?

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); 

它返回

結果集不存在。

我應該如何選擇結果?

回答

5

使用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; 
相關問題