2013-07-17 1 views
0

안녕하세요 기본 키 (id) = 1이거나 외래 키 = 1 인 모든 행을 선택하신 쿼리가 있습니다.MySql 자체가 JOIN으로 업데이트 됨

선택 :

SELECT f2.wz AS wz FROM d7x6r_magazyn_faktura_zakupowa f 

         LEFT JOIN (SELECT id,id_glowna, wz FROM d7x6r_magazyn_faktura_zakupowa )AS f2 
         ON(((f2.id = f.id_glowna OR f2.id = f.id OR f2.id_glowna = f.id OR f2.id_glowna = f.id_glowna) 
         AND f2.id_glowna <> 0) 
         OR (f2.id = f.id OR f2.id = f.id_glowna)) 
         WHERE f.id = 1 OR f2.id_glowna = 1; 

는 지금은 모든 행 0으로 세포 WZ를 업데이트해야합니다. 사용하려고 시도 :

UPDATE d7x6r_magazyn_faktura_zakupowa f 

    LEFT JOIN (SELECT id,id_glowna, wz FROM d7x6r_magazyn_faktura_zakupowa )AS f2 
       ON(((f2.id = f.id_glowna OR f2.id = f.id OR f2.id_glowna = f.id OR f2.id_glowna = f.id_glowna) 
       AND f2.id_glowna <> 0) 
       OR (f2.id = f.id OR f2.id = f.id_glowna)) 

SET f2.wz = 0 
WHERE f.id = 1 OR f2.id_glowna = 1; 

f2.wz를 업데이트 할 수 없기 때문에 작동하지 않습니다.

답변

0

당신은 TMP 테이블을 만들 필요도 LEFT JOIN 당신은 부속을 필요로 표시되지 않습니다이

1

안, 그냥 사용할 수있는 가입 : -

UPDATE d7x6r_magazyn_faktura_zakupowa f 
LEFT JOIN d7x6r_magazyn_faktura_zakupowa f2 
ON(((f2.id = f.id_glowna OR f2.id = f.id OR f2.id_glowna = f.id OR f2.id_glowna = f.id_glowna) 
AND f2.id_glowna <> 0) 
OR (f2.id = f.id OR f2.id = f.id_glowna)) 
SET f2.wz = 0 
WHERE f.id = 1 OR f2.id_glowna = 1; 

당신이이 그러나 LEFT JOIN하지만 거기에 없을 수도있는 행인 F2를 업데이트하므로 INNER JOIN이 더 좋을 수 있습니다.

1

업데이트/삽입/삭제시 조인을 할 수 있지만 조인 된 테이블의 레코드는 업데이트 할 수 없습니다.

당신은 트리거가 테이블 1의 새로운 데이터의 일부를 사용하여 각 업데이트 및 업데이트 표 2에 발사됩니다

DELIMITER $$ 

CREATE TRIGGER au_table1_each AFTER UPDATE ON table1 FOR EACH ROW 
BEGIN 
    UPDATE table2 SET fieldY = new.fieldX WHERE ...; 
END $$ 

DELIMITER ; 

하지만 트리거를 사용하여이 작업을 수행 할 수 있습니다. 이 트리거

참조 UPDATE, INSERT 수 또는 삭제할 수있는, 전 및 작업 후에 있습니다 http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html 과 : http://www.databasedesign-resource.com/mysql-triggers.html

덕분에 : mysql update, insert, delete with joins

+1

"할 수있는 업데이트/삽입에 조인/삭제,하지만 이러한 조인 된 테이블의 레코드를 업데이트 할 수 없습니다. " 왜 안돼? – Strawberry

관련 문제