2010-06-30 2 views
0

두 조인 테이블에있는 경우 내 테이블의 필드를 업데이트하려고합니다.2 INNER JOINs MYSQL 업데이트가 응답하지 않습니다.

update quotes 
inner join collection_records ON quotes.id <> collection_records.record_id 
inner join subcollection_records ON quotes.id <> subcollection_records.record_id 
set quotes.status_id = 1 
where collection_records.type = 'Quote' 
    or subcollection_records.type = 'Quote' 

이 쿼리는 실행되지만 중단됩니다. 내부 조인을 제거하면 작동하지만 견적 ID의 존재에 대해 조인 테이블을 모두 확인해야합니다.

+0

LEFT JOIN이 여기 갈 길이 란 것입니까? – Paul

+1

엄청난 십자가 조인을하고 있으며, ID가 일치하는 컬렉션 및 하위 수집 행 *을 제외한 모든 가능한 조합에 합류했습니다. 진술서가 돌아 다니면 모든 견적이 거의 확실하게 업데이트됩니다. 이것은 조인 가능한 행이 존재하지 않는지 확인하는 방법이 아닙니다 ... 포니의 대답에서 null-join 메쏘드를 사용하십시오. – bobince

답변

0

내 생각에 주로 <> (같지 않음) 연산자 때문입니다. 그게 니가 여기서 찾고있는거야?

2

JOIN을 사용하면 고유 한 지원 데이터를 위해 복제 된 데이터가 위험하기 때문에 조심해야합니다.

UPDATE QUOTES 
    SET status_id = 1 
WHERE id NOT IN (SELECT cr.record_id 
        FROM COLLECTION_RECORDS cr 
        WHERE cr.type = 'Quote') 
    AND id NOT IN (SELECT sr.record_id 
        FROM SUBCOLLECTION_RECORDS sr 
        WHERE sr.type = 'Quote') 

LEFT JOIN을 사용하여이/NULL IS : 나는 다시 쓴 쿼리는 모두 joinging 테이블에서 견적 기록이있는 경우 또한

UPDATE QUOTES 
LEFT JOIN COLLECTION_RECORDS cr ON cr.record_id = id 
           AND cr.type = 'Quote' 
LEFT JOIN SUBCOLLECTION_RECORDS sr ON sr.record_id = id 
            AND sr.type = 'Quote' 
    SET status_id = 1 
WHERE cr.record_id IS NULL 
    AND sr.record_id IS NULL 
+0

OMG 조랑말 나는 위의 쿼리가 트릭을해야한다고 생각합니다. 정말 고마워! – Paul

0

, ... 당신이 얻을 것이다 기록. 조인 중 하나를 선택하면 하나의 레코드 만 반환됩니다. 두 테이블에있는 특정 견적에서 업데이트 대신 선택을 수행하고 두 개의 레코드를 다시 가져 오는지 확인하십시오. 하나의 인용문 레코드가 반환되게하려면 조인을 수정해야합니다.

관련 문제