2010-05-07 2 views
2

3 개의 열이있는 테이블 MRU가 있습니다.간단한 DELETE 문이 작동하지 않았습니다.

(VALUE varchar(255); TYPE varchar(20); DT_ADD datetime) 

이 항목은 단순히 항목을 저장하고 기록 된 날짜를 기록하는 테이블입니다. 내가하고 싶은 일은 : 특정 번호를 초과하는 새 항목을 추가 할 때마다 가장 오래된 항목을 삭제하는 것입니다.

쿼리는 오류를 반환 ... 구문 오류 :

delete from MRU 
where type = 'FILENAME' 
ORDER BY DT_ADD limit 1; 

오류 메시지는 다음과 같습니다 : SQL 오류 : 근처 "ORDER"

여기 내 쿼리입니다.

+6

"오류"또는 "특정 오류"가 반환 되었습니까? 오류 메시지를 게시 할 수 있습니까? –

+2

삭제시 ORDER BY가있는 이유는 무엇입니까? – Oded

+1

@Oded - 그렇게 할 수 있습니다. SQLite 구문을 사용하면 DELETE에 ORDER BY를 사용할 수 있습니다. 의미 상 괜찮아. –

답변

3

나는 완전히 비 휴대용이기 때문에 당신이 그렇게해야한다고 말하는 게 아니에요,하지만 강력한 필요가 있다면,이 작동합니다

SQLite에서 정수 기본 키가 다른 곳에서 정의되지 않으면 rowid 열은 항상 존재합니다. 다음과 같이 사용할 수 있습니다.

delete from MRU where rowid = (
    select rowid from MRU order by DT_ADD limit 1 
) 
5

우선 가장 많이 보유한 정보를 게시하는 데 항상 도움이됩니다. 이 특별한 경우에는 "오류"가 도움이되지 않으며 주어진 실제 오류 메시지를 복사하여 붙여 넣는 데 2 ​​초 정도 걸렸을 것입니다. 그러면 도움이 될만한 단서를 얻을 수 있습니다.

대신 SQLite의 DELETE 문에 대한 설명서로 가서 here을 찾았습니다. 특정 방식으로 컴파일되지 않는 한 lo와 behold, DELETE에는 ORDER BY가 없습니다. 귀하의 버전은 오류 메시지 없이는 알기 힘들지만 가정하지 않습니다.

은 당신이 대신 시도 할 수있는 것은 이것이다 :

delete from MRU where DT_ADD = (
    SELECT MIN(DT_ADD) FROM MRU WHERE type = 'FILENAME' 
) 
+1

주어진 테이블 선언에는 기본 키라고 가정 할 수있는 단일 열이 포함되어 있지 않습니다. – Dathan

+0

예, 우리가 말하는대로 다시 쓰는 것으로 나타났습니다. –

+0

PK가 부족하면 아마도 '제한 1'을 사용하려고합니다. 디자인을 수정하고 'DELETE ... WHERE ID = N'을 –

관련 문제