2014-09-12 2 views
0

나는 SQL 쿼리를 가지고MySQL의 날짜 비교

I가 잘 작동 다음 쿼리

SELECT * FROM articles where `id` =1 AND `datatime` > ='datetime1'; 
UNION ALL 
SELECT * FROM articles where `id` =2 AND `datatime` > ='datetime2'; 
UNION ALL 
SELECT * FROM articles where `id` =3 AND `datatime` > ='datetime3'; 
UNION ALL 
SELECT * FROM articles where `id` =4 AND `datatime` > ='datetime4'; 

이제 문제입니다 어쩌면 더 큰 목록이 존재하는 경우, 10000 개가 넘는 경우이 쿼리를 어떻게 처리해야합니까? 이 쿼리를 수행하는 다른 방법이 있습니까?

답변

1

union 대신에 하나의 쿼리에서이 작업을 수행해야합니다.

SELECT * FROM articles where 
(`id` =1 AND `datatime` > ='datetime1') 
or 
(`id` =2 AND `datatime` > ='datetime2') 
or 
(`id` =3 AND `datatime` > ='datetime3') 
or 
(`id` =4 AND `datatime` > ='datetime4'); 

또한이처럼 수행 할 수 있습니다 datatime 값이 항상 동일한 경우

SELECT * FROM articles where 
(id, `datatime`) IN (SELECT 1, 'datetime1' 
        UNION ALL 
        SELECT 2, 'datetime2' 
        UNION ALL 
        SELECT 3, 'datetime3' 
        UNION ALL 
        SELECT 4, 'datetime4' 
        ); 

, 당신이 이런 식으로 작업을 수행 할 수 있습니다

SELECT * FROM articles where 
id IN (1, 2, 3, 4) 
and datatime = 'datetime_value'; 

경우 값 목록 정말 커지면 그 값을 먼저 테이블에 넣고 결합하는 것이 가장 좋습니다.

SELECT * FROM articles a 
INNER JOIN your_values_table yvt ON a.id = yvt.id AND a.datatime = yvt.datatime;