2011-12-21 4 views
1

여기에 문제가 있습니다. 두 테이블이 있다고 가정 해 보겠습니다. 레코드 사이의 유일한 유일한 것은 바코드입니다. 이 코드를 사용하고 있습니다 :테이블을 비교하고 새 레코드를 얻으십시오.

INSERT INTO rez1(barcode,No_,lik_pagr,inventkiekis,Vidurkis,skirias) 
SELECT t2.barcode, t2.No_, t1.lik_pagr, t2.lik_pagr, ROUND(t2.lik_pagr - t1.lik_pagr,3) AS 'Vidurkis', CASE WHEN (t1.lik_pagr - t2.lik_pagr)<>0 THEN 1 
ELSE 0 
END 
FROM likuciai AS t1 
INNER JOIN pirmoji AS t2 
ON t1.barcode = t2.barcode; 

여기서 문제 내가 가지고 - 그것은 단지 (바코드) 두 테이블에 존재하지만 나는 또한 바코드 테이블 같지 않은 기록을 얻을 수있는 방법 레코드를 선택하는 것이 t1? 원인 t2는 항상 사용자가 업데이트 한 테이블이고 t1은 이전 버전이므로 일치하는 레코드와 동일한 산술을 표시하고 적용해야합니다.

답변

2

LEFT JOIN을 사용해야합니다. 단순히 "INNER"를 "LEFT"로 바꾸십시오. 그러면 t1에서 모든 레코드를 가져오고 t2.barcode에 t2에서 일치하는 바코드가없는 t2 값에 대해 NULL을 반환합니다.

+0

내가 원하는 것을 말하기는 어렵지만, t1이 아닌 t2의 모든 레코드를 가져와야합니다. SQLite는 오른쪽 JOIN을 가지고 있지 않으므로 ON에서 tie.barcode = t2.barcode; to 켜기 t2.barcode = t1.barcode; 왼쪽 가입을 사용 하시겠습니까? 고마워/ – Tommix

+0

그리고 어떤 레코드가 새로운 레코드인지 어떻게 알 수 있습니까? – Tommix

+0

@Tommix : Left join에 대한 도움을 구하는 것이 좋습니다. 본질적으로 왼쪽 조인은 왼손 테이블 (즉 첫 번째 테이블)과 오른쪽 테이블 (즉 두 번째 테이블)에서 일치하는 모든 것을 원하고 nothign이 일치하면 null을 원한다고 말합니다. "right table field identity is null"이라고하는 where 절을 추가하면 오른쪽 테이블이 아닌 왼쪽 테이블에있는 레코드를 얻을 수 있습니다. 그렇다면 올바른 장소에 테이블을 놓을 수 있습니다. :) – Chris

관련 문제