2013-04-23 4 views
0

데이터를 추출해야하는 두 개의 테이블이 있습니다. 표 (T1)와 샘플 값 :고유 한 데이터를 선택하는 고급 SQL 쿼리

| rq_id | user_id | is_good | 
|----- 1  |---- 223  |--------  0 ---- | 
|----- 3  |---- 223  |--------  1 ---- | 
|----- 4  |---- 239  |--------  0 ---- | 
|----- 5  |---- 223  |--------  0 ---- | 

표 2 (T2) 및 샘플 값 : 표 1의 rq_id에서

| rq_id | version | random_content | 
|---1---|---3------|------A------|  
|---1---|---2------|------B------|  
|---1---|---1------|------C------| 
|---3---|---2------|------D------| 
|---3---|---1------|------F------| 
|---5---|---2------|------X------| 
|---5---|---1------|------W------| 

고유

, 표 2와 동일한 rq_id과 복수의 열이있다.
Table2에서 rq_id 당 1 행을 가져와야합니다 (가장 버전이 높은 버전 만). Table2에서 request_ids를 선택하는 기준은 user_id = 223 및 is_good = "0"인 Table1에서옵니다.
이 경우에 나는 |---1---|---3------|------A------||---5---|---2------|------X------|을 반환하고 싶습니다.

일부 조인과 구분 된 선택/내부 선택 또는 다른 항목을 사용하여 빠른 SQL 쿼리를 수행 할 수 있습니까? 사전 :

답변

1
SELECT b.* 
FROM Table1 a 
     INNER JOIN Table2 b 
      ON a.rq_ID = b.rq_ID 
     INNER JOIN 
     (
      SELECT rq_id, MAX(version) max_ver 
      FROM table2 
      GROUP BY rq_id 
     ) c ON b.rq_ID = c.rq_ID AND 
       b.version = c.max_ver 
WHERE a.user_ID = 223 AND a.is_good = 0 
에서

감사합니다