2009-10-14 3 views
1

2 개의 테이블을 함께 결합하고 표 1의 데이터 만 (모든 레코드 포함) 원하는 경우 다른 테이블의 열의 데이터를 추가합니다. 모든 레코드에 대해 일치하지 않습니다)SQL을 통해 테이블에 하나의 열을 추가하려고 시도합니다. JOIN

4 개 열과 일치하는 LEFT JOIN을 사용했지만 몇 레코드가 두 배가됩니다. 테이블 1에 1050 개의 레코드가있는 경우 1050 개의 레코드가 반환되기를 원하지만 그 이상을 얻습니다.

일부 문제는 모든 열에 값이 중복되어 있기 때문에 인덱스 열이 없다는 것입니다.

어쨌든

, 여기에 내가 시도 SQL 문입니다하지만 난 얻을 네 개의 추가 기록 (중복)

SELECT t1.*, t2.assignedtechnician 
FROM idlereport AS t1 
LEFT JOIN wipassignedtechnician AS t2 
ON (LEFT(t1.rma, 6)=LEFT(t2.rma, 6) 
AND t1.receiveddate=t2.receiveddate 
AND t1.serial=t2.serial 
AND t1.partnumber=t2.partnumber) 

P.S. MySQL을 사용하고 있습니다

답변

2

문제에보다 많은 행을 결코한다 시간에 지정된 조인 조건에 따라 T1에서 하나의 기록과 일치 T2에 하나 개 이상의 기록이 있다는 것입니다. ..

SELECT t1.*, Min(t2.assignedtechnician) 
FROM idlereport AS t1 
    LEFT JOIN wipassignedtechnician AS t2 
     ON (LEFT(t1.rma, 6)=LEFT(t2.rma, 6) 
      AND t1.receiveddate=t2.receiveddate 
      AND t1.serial=t2.serial 
      AND t1.partnumber=t2.partnumber) 
Group By t1.* 

또는

SELECT t1.*, 
    (Select Min(t2.assignedtechnician) 
    From wipassignedtechnician 
    Where LEFT(rma, 6)=LEFT(t1.rma, 6) 
      AND receiveddate=t1.receiveddate 
      AND serial=t1.serial 
      AND partnumber=t1.partnumber) assignedtechnician 
FROM idlereport AS t1 
+0

첫 번째 행은 한 행만 반환되었지만 두 번째 행은 작동하지만 하위 쿼리는 아직 생각하지 않았습니다. . 감사 – Geoff

0

왼쪽 가입은이 경우 올바른 가입입니다. 귀하의 문제는 귀하의 일부분입니다. 왜 일부 색인이 아닌 문자열 열에 참여합니까?

그럼에도 불구하고 당신이 당신의 왼쪽 테이블 (idlereport)

+0

하나가'idlereport'가 wipassignedtechnician''에 둘 이상의 일치하는 항목 (복수 기술자가있는 경우 쉽게 더 많은 행을 얻을 수 있습니다 예를 들어 보고서 당). –

+0

오. 예. 당신은 맞습니다. 너무 빠르다고 생각 했었습니다. – knittl

+0

DB에 대해 배우기 시작했을 때 나는 인덱스 된 테이블의 중요성을 알지 못했고 그 안에 모든 고유 한 값을 가진 열이 없었기 때문에 제가 만들지 않았습니다. 각 열에 중복 값이 ​​있지만 레코드 자체는 실제로 복제되지 않습니다. 숫자 인덱스를 사용해도 도움이 되었을지 모르겠지만이 질문이 "대답 할 수 없다"면 내 다음 단계가되었습니다. – Geoff

관련 문제