2011-03-28 2 views
0

hy!
2 개의 테이블이 있습니다.sql join 문제

idStudent  name age job  code 
1  john 18  student  1 
2  john 19  programmer  1 
3  john 18  developer  2 
4  mark 18  student  3 
5  mark 19  programmer  1 

정보를 정기적으로

id  address tel  code 
1  fdsf  00232 1 
2  gffdfd 322  1 
3  dsdd  1833  2 
4  gffg  43333 3 
5  fff  1933 1 

나는 구조로 테이블을 가져올

학생 :

idStudent  name age address tel code 
    1    john 18      1 
    3    john 18      2 
    4    mark 18     3 

그래서 내가하고 싶은 것입니다 구조는 위이다 고유 한 코드와 첫 번째 또는 마지막으로 채울 모든 다른 필드가있는 테이블을 얻으려면 (이는 중요하지 않습니다. 나) 데이터를 표시합니다. 중복 된 코드 필드를 갖고 싶지 않습니다. 이것은 중요한 부분입니다.

+0

왜 두 테이블에'code' 필드가 중복됩니까? – JNK

답변

1
select S.IdStudent, MIN(Name) Name, MIN(Age) Age, MIN(Address) Address, MIN(Tel) Tel, MIN(Code) Code 
FROM Students S Inner Join Info I ON S.IDStudent = I.Id 
group by S.IdStudent 
0

당신이 원하는 모든 학생별로 각 테이블에있는 정보를 얻을 경우,이 간단한 가입 쿼리입니다 : 당신이 정보를 중복 한 경우

SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code 
FROM students e 
INNER JOIN infos i ON e.idEstudent=i.id 

, 당신은을 얻기 위해 clausule에 의해 그룹을 사용할 수 있습니다 그룹화하지 않은 각 필드의 값을 가져 오려면 그룹화 된 정보와 MIN 또는 MAX.

에 걸릴 EDITED

는 user599977에서 주석 계정 : 귀하의 코멘트에서

나는 당신이 뭔가 할 수있는 경우라면 당신은?, 정보의 행을 복제 한 상상 :

SELECT e.idStudent, max(e.name), max(e.age), max(i.address), max(i.tel), max(e.code) 
FROM students e 
INNER JOIN infos i ON e.idEstudent=i.id 
GROUP BY e.idStudent 

가 그러나 마지막으로 소개 한 레코드 나 비슷한 것과 같이 좀 더 예측 가능한 필드를 걸러내는 것이 좋습니다. 예를 들어

:

SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code 
FROM students e 
INNER JOIN infos i ON e.idEstudent=i.id 
WHERE i.loadDate= (
    SELECT max(loadDate) 
    FROM infos 
    WHERE id=e.idStudent 
) 

당신은 타임 스탬프 또는 사용자가 입력 한 마지막 인 행을 결정할 수 있습니다 일부 데이터 일부 열은 한 가정.

+0

나는 그것을 시험해 보았지만 나는 3 번 코드 1 번을 가지고있다 ... 다른 필드의 정보가 다르기 때문에 ... 나는 단지 한 번만 얻고 싶다. – user599977