2012-07-18 3 views
0

일부 레코드는 테이블에 추가해야하지만 특정 연결된 테이블과 일치하는 레코드 만 추가해야합니다. 다음과 같이 세 개의 테이블은 다음과 같습니다여러 개의 JOIN이있는 MySQL UPDATE 테이블

extension_prefs (extension_id, value, parameter) 
extension (id, client_id) 
client (id, parent_client_id) 

다음과 같이 이러한 연결됩니다 :

extension_prefs.extension_id = extension.id AND extension.client_id = client.id 

내가 특정 parent_client_id와 클라이언트에 속하는 모든 연장 extension_prefs에 4 개 레코드를 삽입해야합니다. 필자는 매우 단순한 느낌을 갖지만 구문을 알지 못합니다.

편집 : 네,이 레코드를 엉망으로 만들었습니다.이 레코드는 업데이트되지 않아야합니다.

정말 감사합니다

조지

답변

0

당신은 환경 설정의 각각에 대해 다음 쿼리를 호출 할 수 있으며 필요한 모든 확장에 저장됩니다.

업데이트 : 다음 쿼리는 기본 설정에 대한 새 행을 삽입하거나 존재하는 경우 기존 행을 업데이트합니다.
여기서는 extension_prefs 테이블에 extension_id 및 parameter 열에 대한 고유 제한 조건이 있다고 가정합니다.

INSERT INTO extension_prefs (extension_id, parameter, value) 
    SELECT e.id, "key", "value" 
    FROM extension e 
    JOIN client c ON e.client_id = c.id 
    WHERE c.parent_client_id = 123 
ON DUPLICATE KEY 
    UPDATE value = "value" 
+0

실수로 작성한 것처럼 보입니다. 이미 존재하는 extension_prefs의 레코드를 업데이트해야합니다. 어떻게 구문을 변경합니까? – btongeorge

+0

이러한 작업을 처리하기 위해 "ON ​​DUPLICATE KEY"절을 추가 할 수 있습니다. http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html 또는 이렇게해야 업데이트를하고, 절대로 삽입하지 않습니까? – Raul

+0

예. 원래 질문을 엉망으로 만들었습니다. 나는 "특정 parent_client_id를 가진 클라이언트의 모든 레코드에 대해 extension_prefs에있는 많은 레코드를 업데이트해야합니다."라고 말했어야합니다. 이게 훨씬 쉽다고 생각해? – btongeorge