2009-11-27 7 views
0

특정 ID와 항목 앞에 하나의 항목을 가져 오는 쿼리가 필요합니다.MySQL 쿼리 가져 오기 형제

예를 들어, 나는 5 개의 행을 가지며, id의 1에서 5까지이며 id 3 이전과 이후의 id를 선택해야하므로 2와 4를 결과로 얻습니다.

단일 쿼리로 수행 할 수있는 방법이 있습니까?

편집 : 나는 아마 결과가 기준과 일치하는 형제 자매하지만 다음 형제되지 않을 것 말할 것을 잊었다

:

SELECT routeId FROM routes WHERE routeId>::p0:: AND assetKmId<>'0' 

그래서 다음 또는 이전 형제가 assetKmId <>와 일치해야합니다 '0'(이 routeId> :: p0 ::이 시나리오에서는 유효하지 않음)

답변

1

(당신에게 어떤 소용이 경우) 대신 ID 만의 완전한 레코드를 반환하는 최대, 최소 및 노조 결과

SELECT min(routeId) FROM routes WHERE routeId>::p0:: AND assetKmId<>'0' 
UNION 
SELECT max(routeId) FROM routes WHERE routeId<::p0:: AND assetKmId<>'0' 
0

그렇지 않습니까?

SELECT * FROM :tablename 
WHERE id = :yourid - 1 OR id = :yourid + 1 

물론 테이블 이름과 id 매개 변수를 쿼리에 설정해야합니다.

+0

편집을 참조하십시오, 죄송합니다. 더 이상 설명하지 않았습니다. – dfilkovi

+0

아, 전과 후에 다른 기준과 일치하는 가장 가까운 것을 원합니다. –

+0

네, 맞습니다. – dfilkovi

0

정제 solomongaby의 솔루션을 사용하지 이유 :

SELECT * 
    FROM routes 
WHERE routeId = (select min(routeId) from routes where routeId >::p0::) 
    AND assetKmId <> '0' 
UNION 
SELECT * 
    FROM routes 
WHERE routeId = (select max(routeId) from routes where routeId<::p0::) 
    AND assetKmId<>'0' 
관련 문제