2012-06-26 3 views
1

2 개의 테이블 (table1table2)을 결합해야합니다.왼쪽 두 개의 테이블을 조인하고 두 번째 테이블에 나타나는 레코드 만 반환하십시오.

첫 번째 테이블에는 각 레코드의 고유 한 globalcid이 있고 두 번째 테이블에는 동일한 globalcid의 여러 항목이 포함되어 있습니다. 참고 : globalcid은 table2에서 table1까지의 참조 필드입니다.

globalcid /recordcid 
1   /1 
1   /2 
2   /1 
3   /1 
3   /2 
3   /3 
5   /1 

globalcid/itemdesc 
1  /item 1 
2  /item 2 
3  /item 3 
4  /item 4 
5  /item 5 

표 2

나는 쿼리가 표 2에 의해 [표 2] GROUP의 기록과 [표 1]에서 레코드 만 반환하려면 .globalcid하지만 각 전역 코드의 마지막 레코드를 반환합니다

위의 예에서 5,

globalcid/itemdesc/table2.globalcid 
1  /item 1 /2 
2  /item 2 /1 
3  /item 3 /3 
5  /item 5 /1 

답변

3
SELECT 
    a.*, 
    MAX(b.recordcid) AS maxcid 
FROM 
    table1 a 
INNER JOIN 
    table2 b ON a.globalcid = b.globalcid 
GROUP BY 
    a.globalcid 

, 다음이 잘되어야합니다. 같은 같은 테이블의 다른 열이있는 경우 그러나 :

globalcid /recordcid /othercolumn 
------------------------------------------ 
1   /1   /bertrand 
1   /2   /centipede 
2   /1   /yarn 
3   /1   /obviate 
3   /2   /hyper 
3   /3   /fish 
5   /1   /larry 

가 ... 다음 MAX() 값은 othercolumn에 해당 행 데이터와 일치하지 않습니다, 대신 당신은 최대의 선택에 포장해야한다 그래서 같은 부속 :

SELECT 
    a.*, 
    c.recordcid, 
    c.othercolumn 
FROM 
    table1 a 
INNER JOIN 
    (
     SELECT globalcid, MAX(recordcid) AS maxcid 
     FROM table2 
     GROUP BY globalcid 
    ) b ON a.globalcid = b.globalcid 
INNER JOIN 
    table2 c ON b.globalcid = c.globalcid AND b.maxcid = c.recordcid 

결과 :

globalcid /itemdesc /recordcid /othercolumn 
--------------------------------------------------------- 
1   /item1  /2   /centipede 
2   /item2  /1   /yarn 
3   /item3  /3   /fish 
5   /item5  /1   /larry 
+0

[table2]의 다른 필드를 포함해야합니다. –

+0

좋아요! 그런 다음 게시 한 두 번째 솔루션을 사용해야하고'c.othercolumn'을 선택하려는 열로 바꿉니다. 별칭'c'를 컬럼 이름 앞에 붙여야합니다. 게시 된 솔루션을 변경하기 위해 테이블 ​​스키마를 조정하여 해당 열을 포함시킬 수도 있습니다. –

1

당신은 내부가에 참여하여이를 달성 할 수 있어야 돌아가 집계해야

SELECT table1.globalcid, itemdesc, MAX(recordcid) 
FROM table1 INNER JOIN table2 on table1.globalcid = table2.globalcid 
GROUP BY table1.globalcid, itemdesc 

내부는 표 2에서 제외 모든 기록에 가입은 일치하는 ID가 인 테이블 1에 없습니다. MAX/GROUP BY는 각 globalcid에 대해 recordid의 최대 값을 꺼냅니다. 당신이 recordcid에 대한 유일한 우려하고 테이블의 다른 열을 필요로하지 않는 경우

+0

이 각 항목의 마지막 레코드를 선택하지 않습니다, 그것은 1을 선택 한 –

관련 문제