2014-09-02 5 views
1

제목에서 동적 선택 문을 사용하여 임시 테이블을 만들고 싶습니다. 여기 내 코드입니다 :MySql : 동적 선택 문을 사용하여 임시 테이블을 만드는 방법은 무엇입니까?

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;