IT Share you

동일한 사용자 이름으로 다른 테이블의 테이블 값 업데이트

shareyou 2020. 11. 23. 20:29
반응형

동일한 사용자 이름으로 다른 테이블의 테이블 값 업데이트


나는라는 이름의 같은 열이 두 테이블이 user_name말하는, table_a, table_b.

내가 원하는 복사 table_b, column_b_1, column_b2,하는 table_b1, column_a_1, column_a_2(가) 여기서, 각각 user_name동일 방법 SQL 문을 할까?


적절한 인덱스가 있으면 제대로 작동합니다.

UPDATE table_a
SET
      column_a_1 = (SELECT table_b.column_b_1 
                            FROM table_b
                            WHERE table_b.user_name = table_a.user_name )
    , column_a_2 = (SELECT table_b.column_b_2
                            FROM table_b
                            WHERE table_b.user_name = table_a.user_name )
WHERE
    EXISTS (
        SELECT *
        FROM table_b
        WHERE table_b.user_name = table_a.user_name
    )

sqlite3의 UPDATE 는 FROM 절을 지원하지 않으므로 다른 RDBMS보다 조금 더 작업이 가능합니다.

성능이 만족스럽지 않은 경우 다른 옵션은 select를 사용하여 table_a에 대한 새 행을 만들고 table_a와 함께 임시 테이블에 조인하는 것입니다. 그런 다음 table_a에서 데이터를 삭제하고 임시에서 다시 채 웁니다.


sqlite 버전 3.15부터 UPDATE 구문 은 SET 부분에 column-name-list를 허용하므로 쿼리를 다음과 같이 작성할 수 있습니다.

UPDATE table_a
SET
    (column_a_1, column_a_2) = (SELECT table_b.column_b_1, table_b.column_b_2
                                FROM table_b
                                WHERE table_b.user_name = table_a.user_name )
WHERE
    EXISTS (
       SELECT *
       FROM table_b
       WHERE table_b.user_name = table_a.user_name
   )

더 짧을뿐만 아니라 더 빠릅니다.


한 테이블을 다른 테이블에서 업데이트하는 훨씬 더 나은 솔루션이 있습니다.

;WITH a AS
(
    SELECT
        song_id,
        artist_id
    FROM
        online_performance
)
UPDATE record_performance
SET
    op_song_id=(SELECT song_id FROM a),
    op_artist_id=(SELECT artist_id FROM a)

;

참고 URL : https://stackoverflow.com/questions/3845718/update-table-values-from-another-table-with-the-same-user-name

반응형