Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql:如何使用动态select语句创建临时表?_Mysql_Sql_Stored Procedures_Temp Tables - Fatal编程技术网

MySql:如何使用动态select语句创建临时表?

MySql:如何使用动态select语句创建临时表?,mysql,sql,stored-procedures,temp-tables,Mysql,Sql,Stored Procedures,Temp Tables,正如您从标题中所了解的,我想使用动态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.c

正如您从标题中所了解的,我想使用动态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);
它回来了

结果集不存在

如何选择结果?

使用select语句创建表。您还可以缩短WHERE子句

使用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;