2009-12-04 2 views
1

에 가입 얻을 : 나는 두 번째 조건을 만족하는 첫 번째 행을 얻을 필요가a의 첫 번째 행이 같은 질의를했습니다

select t1.id, t1.sample, t2.id from table t1 join table t2 
on t1.sample = t2.sample and t2.id > t1.id 

.

아이디어가 있으십니까?

+1

첫 번째 행은 정확히 무엇을 기반으로합니까? 결과 세트를 주문하지 마십시오. –

+0

두 테이블에 샘플 데이터를 제공하고 예상되는 출력의 예를 제공하면 도움이 될 것으로 생각합니다. 나는 당신이 당신의 다른 코멘트에서 의미하는 바를 따르지 않을 것입니다. "나는 모든 이드를 만족시키는 첫 번째 이드를 가져야한다." –

답변

1

음.

당신이 시도 할 수 : 당신이 SQL 서버로 작업하는 경우, 은 MySQL과 연동하여 작업하는 경우, 제한 1

을 추가 상위 1

를 추가 그것은 첫 번째를 반환합니다 열.

주문 절도 추가 할 수 있습니다.

+0

그는 Oracle DB를 사용하고 있습니다. –

3
SELECT t1.id, t1.sample, t2.id FROM table t1 JOIN TABLE t2 
ON t1.sample = t2.sample AND t2.id > t1.id WHERE ROWNUM = 1 
+0

이 기법에 대한 설명이 있습니다. SELECT에 ORDER BY 절이 있으면 ORDER BY 앞에 WHERE ROWNUM = 1이 실행됩니다. 이 경우 하위 쿼리에 SELECT (WHERE ROWNUM = 1 조건 빼기)를 넣은 다음 SELECT * FROM (하위 쿼리)에 ROWNUM = 1을 입력합니다. 예, 복잡하지만 오라클이 있습니다. –

+0

과 rownum = 1은 작동하지만 모든 ID를 추출해야하고 하나만 추출해야합니다. –

+0

당신은 당신의 상태를 만족시키는 첫 번째 행을 얻고 싶다고 말하지 않았습니까? –

1

반환되는 모든 행은 두 조건을 모두 충족하므로 두 번째 조건이 만족되는지 확인하기 위해 특별한 조치를 취할 필요가 없습니다.

반환 된 결과 크기를 1로 제한하려면 오라클에서 실행될 경우 WHERE ROWNUM = 1을 쿼리에 추가하십시오.

+0

네,하지만 모든 id에 대해 나는> 조건을 만족시키는 첫 번째 id를 취해야합니다. rownum = 1을 사용하면 첫 번째 행만 반환됩니다. –

+0

나는이 문제를 잘 모르겠다. 리턴 된 모든 ID는> 조건을 만족시킵니다. t2.id> t1.id 이외에 가장 큰 t2.id를 찾고 계십니까? –

0

오라클은 "ROWNUM"이라는 것을 사용합니다. 결과의 수를 제한하는 것은 DBMS간에 성가신 일관성이 없습니다.

SELECT t1.id, t1.sample, t2.id 
FROM table t1 join table t2 
ON t1.sample = t2.sample and t2.id > t1.id 
WHERE ROWNUM <= 1 
0

당신은 두 번째 조건을 만족하는 최소 t2.id를 원하는 경우 두 번째 조건을 만족하는 가장 큰 t2.id를 원하는 경우

select * from (select t1.id, t1.sample, t2.id from table t1 join table t2
on t1.sample = t2.sample and t2.id > t1.id order by t2.id) where rownum =1

다음

select * from (select t1.id, t1.sample, t2.id from table t1 join table t2
on t1.sample = t2.sample and t2.id > t1.id order by t2.id desc) where rownum =1