복붙노트

[SQL] SQL SET UPDATE 하나의 열은 다른 열 참조하는 관련 테이블의 값과 동일하도록?

SQL

SQL SET UPDATE 하나의 열은 다른 열 참조하는 관련 테이블의 값과 동일하도록?

내가 그 만든 감각을 희망, 내가 정교한 보자 :

각 행에있는 퀴즈 프로그램에 대한 데이터를 추적하는 표가있다 ..

QuestionID 및 AnswerID (각 테이블이있다). 그래서 버그 때문에 NULL로 설정 QuestionIDs의 무리가 있었다, 그러나 관련 AnswerID의 QuestionID는 답변 테이블에 있습니다.

그래서 QuestionID가 NULL 말하고 우리는 NULL 값이 어디 있었어야 QuestionID있는 열이있는 답변 테이블로 이동 AnswerID (500)를 발견하면 AnswerID는 500입니다.

그래서 기본적으로 내가 QuestionID가 trackings 테이블 (작성되고있는 NULL QuestionID 같은 행)에있는 AnswerID의 대답 행에 답변 테이블에서 찾을 수에 동일하게 각 NULL QuestionID을 설정할.

내가 어떻게 이런 짓을 했을까?

UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?

확실하지 내가이 질문 응답 일치의 질문에 IS에 할당 할 수있을 것입니다 방법 ...

해결법

  1. ==============================

    1.

    update q
    set q.QuestionID = a.QuestionID
    from QuestionTrackings q
    inner join QuestionAnswers a
    on q.AnswerID = a.AnswerID
    where q.QuestionID is null -- and other conditions you might want
    

    나는 갱신에 대한 결과 집합 업데이트를 (단지 선택과 같은 쿼리를) 실행하기 전에 무엇인지 확인하는 것이 좋습니다 :

    select *
    from QuestionTrackings q
    inner join QuestionAnswers a
    on q.AnswerID = a.AnswerID
    where q.QuestionID is null -- and other conditions you might want
    

    특히 각각의 응답 ID는 확실히 단지 1 관련된 질문 아이디되어 있는지 여부를 확인합니다.

  2. ==============================

    2.포함하지 않는 (모든 DBMS를 지원하는) 사용을 표기법을 갱신하고 조인 :

    포함하지 않는 (모든 DBMS를 지원하는) 사용을 표기법을 갱신하고 조인 :

    UPDATE QuestionTrackings
       SET QuestionID = (SELECT QuestionID
                            FROM AnswerTrackings
                            WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)
       WHERE QuestionID IS NULL
         AND EXISTS(SELECT QuestionID
                            FROM AnswerTrackings
                            WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)
    

    종종이 같은 쿼리에, 당신은이 하위 쿼리가 포함 EXISTS 절과 WHERE 절을 한정해야합니다. 이 방지 (일반적으로 모든 값 제로 화시키는) 일치가없는 행 이상 짓밟고에서 UPDATE. 누락 된 질문 ID가 NULL로 NULL을 변경 것이기 때문에이 경우, 그것은 틀림없이 문제가되지 않습니다.

  3. ==============================

    3.당신은 MySQL의 워크 벤치에 나보다 같은 문제로 실행되지만 내부에 쿼리를 실행 한 경우 나는 문에서 (가) 나를 위해 일을하지 않았다 후 가입 모른다. 프로그램 문에서 불평 때문에 쿼리를 실행할 수 없습니다.

    당신은 MySQL의 워크 벤치에 나보다 같은 문제로 실행되지만 내부에 쿼리를 실행 한 경우 나는 문에서 (가) 나를 위해 일을하지 않았다 후 가입 모른다. 프로그램 문에서 불평 때문에 쿼리를 실행할 수 없습니다.

    그래서 쿼리 작업을하기 위해 나는 그것을 변경

    UPDATE table1 INNER JOIN table2 on table1.column1 = table2.column1
    SET table1.column2 = table2.column4
    WHERE table1.column3 = 'randomCondition';
    

    대신에

    UPDATE a
    FROM table1 a INNER JOIN table2 b on a.column1 = b.column1
    SET a.column2 = b.column4
    WHERE a.column3 = 'randomCondition';
    

    내 솔루션은 MySQL을위한 올바른 구문입니다 같아요.

  4. ==============================

    4.

    UPDATE
        "QuestionTrackings"
    SET
        "QuestionID" = (SELECT "QuestionID" FROM "Answers" WHERE "AnswerID"="QuestionTrackings"."AnswerID")
    WHERE
        "QuestionID" is NULL
    AND ...
    
  5. ==============================

    5.나도 같은 질문을 가지고 있었다. 여기 eglasius의 유사한 작업 솔루션입니다. 나는 PostgreSQL을 사용하고 있습니다.

    나도 같은 질문을 가지고 있었다. 여기 eglasius의 유사한 작업 솔루션입니다. 나는 PostgreSQL을 사용하고 있습니다.

    UPDATE QuestionTrackings
    SET QuestionID = a.QuestionID
    FROM QuestionTrackings q, QuestionAnswers a
    WHERE q.QuestionID IS NULL
    

    q는 1 행에 테이블 이름 대신에 사용 된 경우는 불평 아무것도 라인 2 QuestionID 앞에 없습니다.

  6. ==============================

    6.

     select p.post_title,m.meta_value sale_price ,n.meta_value   regular_price
        from  wp_postmeta m 
        inner join wp_postmeta n
          on m.post_id  = n.post_id
        inner join wp_posts p
          ON m.post_id=p.id 
        and m.meta_key = '_sale_price'
        and  n.meta_key = '_regular_price'
         AND p.post_type = 'product';
    
    
    
     update  wp_postmeta m 
    inner join wp_postmeta n
      on m.post_id  = n.post_id
    inner join wp_posts p
      ON m.post_id=p.id 
    and m.meta_key = '_sale_price'
    and  n.meta_key = '_regular_price'
     AND p.post_type = 'product'
     set m.meta_value = n.meta_value;
    
  7. ==============================

    7.MySQL을위한이 쿼리를 사용할 수 있습니다

    MySQL을위한이 쿼리를 사용할 수 있습니다

    UPDATE는, 표 2의 B 세트 a.coloumn을 표 = b.coloumn WHERE a.id = b.id

  8. ==============================

    8.SET 전에 가입 내부에 1 테이블을 필요로하는 2 테이블 데이터를 업데이트 :

    SET 전에 가입 내부에 1 테이블을 필요로하는 2 테이블 데이터를 업데이트 :

    `UPDATE `table1` INNER JOIN `table2` ON `table2`.`id`=`table1`.`id` SET `table1`.`name`=`table2`.`name`, `table1`.`template`=`table2`.`template`;
    
  9. ==============================

    9.MySQL을위한 작품 아래

    MySQL을위한 작품 아래

    update table1 INNER JOIN table2 on table1.col1 =  table2.col1
    set table1.col1 =  table2.col2
    
  10. ==============================

    10.나는이 일을한다고 생각합니다.

    나는이 일을한다고 생각합니다.

    UPDATE QuestionTrackings
    SET QuestionID = (SELECT QuestionID
                      FROM AnswerTrackings
                      WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)
    WHERE QuestionID IS NULL
    AND AnswerID IS NOT NULL;
    
  11. from https://stackoverflow.com/questions/707371/sql-update-set-one-column-to-be-equal-to-a-value-in-a-related-table-referenced-b by cc-by-sa and MIT license