2011-10-13 2 views
3

나는 사회와 공식 (상호 배타적 인)의 두 종류의 기사가있는 뉴스 데이터베이스 테이블을 가지고있다.이 SQL 문을 구성하는 적절한 방법은 무엇입니까?

공식 뉴스 기사 만 남기고 테이블의 소셜 행 수를 특정 숫자로 줄이는 것이 좋습니다. 여기

내가 지금까지 가지고 올 한 것입니다 : 그러나

, 나는 ORDER BY clause should come after UNION not before을 내용의 오류가 발생합니다. ORDER BY을 내측 끝인 SELECT으로 이동하면 LIMIT clause should come after UNION not before이됩니다.

나는 오류 메시지를 이해하지만 내가 수행하려고 시도하는 다른 방법이 있는지 궁금합니다. LIMIT 절을 내부의 SELECT 끝으로 이동하면 테이블에 20 개 이상의 소셜 행이 남게됩니다 (공식 행 수이기 때문에). 어쩌면이 같은

+0

는 아직도 정확히 뭘하고 싶어 궁금 해요. 1. "공식"- 행을 삭제하고 싶지는 않습니다. 2. 당신은 "공식적인"것이 아닌 - 모든 것을 지우고 싶습니다. - 말하자면 - 가장 새로운 20 가지를 제외 하고요. 그 맞습니까? – Fildor

+0

그게 바로 내가하고 싶은 일입니다. – howettl

+2

주위를 돌릴 수있는 방법이 있습니까? 내 말은 다음과 같습니다 : 뉴스에서 삭제 어디에서 IsOfficialNews = 0 AND (_id 안 (<처음 20 개를 여기에서> 선택하십시오)) – Fildor

답변

3

(위의 의견을 참조)

DELETE FROM News 
WHERE IsOfficialNews=0 
AND _id NOT IN 
(SELECT _id 
FROM News 
WHERE IsOfficialNews=0 
ORDER BY Date DESC LIMIT 20) 
+0

+1. 그것이 최선의 방법입니다. – Rondel

관련 문제