2013-08-09 6 views
1

한 테이블에서 다른 테이블로 값을 가져 오려고하면 모든 결과를 얻지 못합니다.복제 값이있는 JOIN의 UPDATE 테이블은 첫 번째 값만 반환합니다.

JOIN transaction ON transaction.invoice = invoicing.invoice 

때때로, 나는 2 또는 3 같은 송장 번호와 송장 및 업데이트가 첫 번째 송장 번호에서 발생, 동일한 송장 번호와 다른 사람을 건너 뛰고이 : 나는에 물어 경우 예, 아래의 코드를 참조하십시오.

중복을 포함하여 모든 인보이스가 필요합니다.

UPDATE invoicing 
JOIN transaction ON transaction.invoice = invoicing.invoice 
SET invoicing.raison = transaction.transaction, invoicing.description = 
transaction.description, invoicing.voyage_passenger = transaction.voyage_passenger 

무엇이 누락 되었습니까?

편집 :

표 거래 :

|num |date   |invoice |type |transaction |amount |description 
|886051 |1375381803  |859532  |A  |carte   |7.00  |bla bla desc1 
|886052 |1375381809  |859532  |P  |repro   |0.00  |bla bla desc2 

표 인보이스 - 아래에 언급하지 위의 표에 비해 약 8 개의 열이 있습니다. 다시 말하면, 위의 두 번째 행의 정보가 아래의 표에 새 행에 포함 되기만하면됩니다. 또한이 중복 행을 삽입하기 위해 UPDATE 대신 INSERT가 필요하다는 것을 알게되었습니다.

|num |date   |invoice |type |raison |amount |description |clientID 
|951100 |1375381803  |859532  |A  |carte |7.00  |bla bla desc1 |121212 
|951101 |1375401111  |859533  |A  |carte |7.00  |bla different |222444 

감사합니다.

+0

업데이트 쿼리를 선택 쿼리로 변경하십시오. 그러면 예기치 않은 결과를 초래하는 원인을 파악하는 데 도움이됩니다. –

+2

'청구서 발송'또는 '거래'에 중복이 있습니까? 일부 테이블 데이터 예제가 도움이 될 것입니다. – valex

+3

가장 좋은 추측 : 인보이스 발행의 단일 행과 일치하는 여러 행의 거래가 있습니다. 이 쿼리는 인보이스 발행에 새로운 행을 추가 할 것을 기대하고 있지만,'update'는 그렇게하지 않습니다. 새로운 행을 '삽입'해야합니다. –

답변

1

ClientId과 관련해서는 모른다. 귀하의 샘플 데이터 청구서에 따르면 다른 날짜가 될 수 있으므로 ClientId가 다른 날짜의 인보이스에 대해 동일한 지 확실하지 않습니다.

insert into invoicing (`num`, `date`, `invoice`, `type`, 
         `raison`, `amount`, `description`) 
select `num`, `date`, `invoice`, `type`, `transaction`, `amount`, `description` 
from Transaction t 
where not exists 
(select `num` from invoicing i 
    where 
     i.`num`=t.`num` 
    and i.`date`=t.`date` 
    and i.`invoice`=t.`invoice` 
    and i.`type`=t.`type` 
    and i.`raison`=t.`transaction` 
    and i.`amount`=t.`amount` 
    and i.`description`=t.`description` 

) 

SQLFiddle demo

+0

나는이 아이디어가 효과적이다. 그러나 나는 원래 테이블을 만들었을 때 내가했던 다른 실수를 깨닫게되었고 지금 새로운 솔루션을 찾아야 만한다. 당신은 저를 생각하고 그것 좋은 것입니다;) – Mathieu

0

(가) 아마 두 번째 table.Why 왼쪽이 가입되지에게 존재하지 않는 조인의 첫 번째 테이블에서 송장 번호?

관련 문제