2012-04-25 3 views
1
parent_table: 
ID | FIELD1 | FIELD2 
____|________|________ 
1 |........|...... 
2 |........|..... 
3 |.............. 

child_table: 
ID | FIELD3 
___|________ 
1 | 18 
1 | 7 
2 | .. 
1 | .. 
3 | .. 
2 | .. 

이 테이블을 업데이트하고 싶다고 가정 해 봅시다. 이것은 내가 달성하는 데 필요한 것입니다 : 각 ID의 자식 테이블의 항목 수를 업데이트하는 동안 다를 수자식 테이블의 여러 행에 대한 업데이트를 결합하십시오.

UPDATE parent_table SET 
    FIELD1 = 'XXX', 
    FIELD2 = 'YYY' 
WHERE ID = 2; 

DELETE FROM child_table 
WHERE ID = 2; 

INSERT INTO child_table (ID, FIELD3) 
    VALUES (2, 50), 
    VALUES (2, 17), 
    VALUES (2, 9); 

참고.

하나의 쿼리에서 동일한 결과를 얻을 수 있습니까? 거래를 사용할 수 없습니다.

아마도 처음 두 쿼리는 병합하기가 더 쉽습니다. UPDATE 중에 자식 테이블에 가입하고 null 값을 설정하려고했지만 여러 행을 처리하는 방법을 알지 못합니다. 중첩 SELECT처럼 중첩 된 UPDATE를 사용할 수 있습니까?

답변

1

한 명령에 여러 개의 테이블을 업데이트 할 수 있습니다 그러나

UPDATE parent_table p LEFT JOIN child_table c On p.id = c.id 
SET 
    p.FIELD1 = 'XXX', 
    p.FIELD2 = 'YYY', 
    c.FIELD3 = '' 
WHERE p.ID = 2; 

, 당신이 업데이 트를 미리 형성 할 수 있다고 생각과 같은 명령으로 삭제하지 마십시오을 -하지만 난 그것에 대해 확실하지 않다 인정합니다 .

는 여러 테이블에 대한 더 here

다른 (그리고 선호) 접근 방식은 갱신시 child_table에서 관련 기록을 삭제합니다 parent_table에 트리거를 작성하는 것입니다 업데이트 읽을 수 있습니다.

+0

물론 문제는 : 조인 된 테이블에서 여러 행을 어떻게 업데이트합니까? CASE 문장을 넣어도 (idk) 허용 되었더라도 테이블의 항목 수와 업데이트 할 번호 사이의 불일치를 어떻게 설명합니까? 예를 들어 여기에는 ID = 2에 대한 두 개의 항목이 있지만 다른 항목을 넣으려고하면 어떻게됩니까? .. 어쩌면 그것을 할 수 없다. – Valentino

+0

"another"를 넣으면 다음과 같은 의미입니다. 예를 들어 ID 2와 ID3을 모두 변경 하시겠습니까? – alfasin

+0

아니요,'FIELD3'이 문자열 "5,40,15"로 설정된 경우'3,5,7,8,15,7 "'로 업데이트해야 할 수도 있습니다. 즉, 'child_table'의 행의 수는 다양 할 수 있습니다. 이 경우 – Valentino