반응형
동일한 사용자 이름으로 다른 테이블의 테이블 값 업데이트
나는라는 이름의 같은 열이 두 테이블이 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)
;
반응형
'IT Share you' 카테고리의 다른 글
파일이 존재하고 C ++에서 읽을 수 있는지 확인하는 방법은 무엇입니까? (0) | 2020.11.23 |
---|---|
행렬의 행에 벡터를 곱 하시겠습니까? (0) | 2020.11.23 |
jQuery Mobile에서 버튼 비활성화 (0) | 2020.11.23 |
Python 목록에서 항목의 마지막 항목을 찾는 방법 (0) | 2020.11.23 |
System.out.println ()에 의해 콘솔에 인쇄 된 내용을 삭제하는 방법은 무엇입니까? (0) | 2020.11.23 |