2013-03-07 4 views
0

이 문제점을 검색했지만 그와 비슷한 것을 찾지 못했습니다. 나는 두 개의 테이블을 가지고 있는데, 둘 다 필드, FormID를 가지고있다. 표 A에서 FormID는 고유합니다. 테이블 B에는 동일한 FormID를 가진 여러 레코드가있을 수 있습니다. 테이블 B는 문제 추적기 테이블이므로 양식에 여러 데이터 항목 문제가있는 경우 여러 레코드가 있습니다.여러 테이블에서 고유 값을 선택하십시오. 어디에 하나가 여러 개가 있습니까?

다음 쿼리는 작동합니다

select distinct b.FormID 
from b 
where b.FormID = a.FormID 
and a.status='done' 

은 최대한 독특한 FormIDs의 결과 목록을 생성한다. 그러나이 쿼리에서 다른 열을 가져와야 할 때 선택 항목에 해당 열을 추가하거나 모든 중복 FormID를 가져 오는 경우도 있습니다.

이 나는 ​​시도했다 :

select distinct (b.FormID), a.FormType, a.Site, a.uid, b.ProbID, b.Date 
from b, a 
where b.FormID = a.FormID 
and a.status='done' 

뿐만 아니라 사용의 변화의 몇 조인,하지만 그들은 모두 중복 FormIDs 모든 행과 끝으로

.

제안 사항?

+1

시도 a와 b의 일대 다 관계. –

+0

어느 dbms입니까? PostgreSQL은 좋은 버전이지만 다른 것들은 약간의 작업이 필요합니다. –

+0

Ooops, 미시시피, 그것은 MS SQL 2008입니다. 그리고 B 레코드에 어떤 레코드가 있는지 상관하지 않습니다. 중요한 것은 데이터 입력 문제가있는 모든 FormID 목록이 필요하다는 것입니다. 그런 다음 누군가가 수동으로 수정하도록 양식을 표시 하겠지만 그 목록에 같은 양식의 배수가 필요하지는 않습니다. – AnnL

답변

0

가 있기 때문에이 값 중 하나의 당신이 보여주고 싶은 것 b.ProbID`과`b.Date`,`다른 값 ...있을 것이라는 점을 가정, 그래서

SELECT b.FormID, 
     MAX(a.FormType) FormType, 
     MAX(a.Site) Site, 
     MAX(a.uid) uid, 
     MAX(b.ProbID) ProbID, 
     MAX(b.Date) Date 
    FROM b INNER JOIN 
     a ON b.FormID = a.FormID 
WHERE a.status='done' 
GROUP BY b.FormID 
관련 문제