[SQL] SQLite는 내부 조인 - 업데이트가 다른 테이블의 값을 사용하여
SQLSQLite는 내부 조인 - 업데이트가 다른 테이블의 값을 사용하여
이것은 아주 쉽고 여러 번 요청하고있다 그러나 나는 일에 그것을 얻을 수 없습니다. 내가 일을해야한다고 생각 SQL 쿼리는 다음과 같습니다
UPDATE table2
SET dst.a = dst.a + src.a,
dst.b = dst.b + src.b,
dst.c = dst.c + src.c,
dst.d = dst.d + src.d,
dst.e = dst.e + src.e
FROM table2 AS dst
INNER JOIN table1 AS src
ON dst.f = src.f
해결법
-
==============================
1.SQLite는이 업데이트 문에 조인에서 지원되지 않기 때문에 UPDATE 문을 사용하는 것은 불가능합니다. 문서를 참조하십시오 : 업데이트 문
SQLite는이 업데이트 문에 조인에서 지원되지 않기 때문에 UPDATE 문을 사용하는 것은 불가능합니다. 문서를 참조하십시오 : 업데이트 문
당신은 단지 정적 값으로 단일 열을 업데이트하고 싶다면, 당신은 제대로 업데이트 문에 하위 쿼리를 사용할 수 있습니다. SQLite는에 테이블을 조인하는 동안 업데이트를 어떻게해야합니까 :이 예제를 참조하십시오?
이제 예에서, 가정을 만드는 것은 "열 F"에 고유 키가 있다는 것을 - 나는 문을 대체 사용 마련이 해결 방법 / 솔루션 :
replace into table2 (a, b, c, d, e, f, g) select src.a, src.b, src.c, src.d, src.e, dest.f, dest.g from table1 src inner join table2 dest on src.f = dest.f
나는 또한 당신이 "갱신"오직이 방법 일부 열 거라고하는 방법을 보여주는 표 2 "열 g"에 여분의 열을 추가했다.
또 다른 것은 당신이 사용하는 경우 약은 신중해야 "PRAGMA의 foreign_keys = ON을;" 이 행이 효과적으로 삭제 및 삽입으로이 문제를 가질 수 있습니다.
-
==============================
2.나는 대안 기술 트리거를 사용하여 소스 테이블의 더미 필드의 비용이기는하지만, 업데이트의 방향을 "반전"를 내놓았다.
나는 대안 기술 트리거를 사용하여 소스 테이블의 더미 필드의 비용이기는하지만, 업데이트의 방향을 "반전"를 내놓았다.
일반적인 관점에서, 당신은 마스터 테이블과 업데이트 테이블이있다. 당신은 일부를 업데이트 할 / 업데이트에서 해당 분야의 마스터 레코드의 모든 필드는 키 필드의 키에 의해 연결.
대신 UPDATE 마스터 SET의 ... 마스터 INNER로부터 가입 업데이트를 Master.Key = Updates.Key 다음을 수행 :
-
==============================
3.토니가 말한대로,이 솔루션은이 방법으로 대체하지만 당신은 sqlite가 숨겨진 필드처럼 가입으로 전체 업데이트를 시뮬레이션 할 rowid로 사용할 수 있습니다 :
토니가 말한대로,이 솔루션은이 방법으로 대체하지만 당신은 sqlite가 숨겨진 필드처럼 가입으로 전체 업데이트를 시뮬레이션 할 rowid로 사용할 수 있습니다 :
replace into table2 (rowid,a, b, c, d, e, f, g) select dest.rowid,src.a, src.b, src.c, src.d, src.e, dest.f, dest.g from table1 src inner join table2 dest on src.f = dest.f
당신이 조인으로 업데이트를 할 수있는 대체 또는 표준 방법으로 기본 키가없는 경우이하면 전체 행을 다시 작성하십시오.
-
==============================
4.내부 조인도 여러 가지 다른 DB의 수행과 SQLite는 업데이트를 지원하지 않습니다. 내부는 그것이 단지 UPDATE 및 하위 쿼리 선택을 사용하여 수행 할 수 있지만 좋은 간단 결합합니다. 'SET'에 대해 동일한 결과를 where 절 및 하위 쿼리와 'IN'과 추가 하위 쿼리를 사용하여 항상 수행 할 수 있습니다. 다음은 어떻게하는지입니다.
내부 조인도 여러 가지 다른 DB의 수행과 SQLite는 업데이트를 지원하지 않습니다. 내부는 그것이 단지 UPDATE 및 하위 쿼리 선택을 사용하여 수행 할 수 있지만 좋은 간단 결합합니다. 'SET'에 대해 동일한 결과를 where 절 및 하위 쿼리와 'IN'과 추가 하위 쿼리를 사용하여 항상 수행 할 수 있습니다. 다음은 어떻게하는지입니다.
UPDATE table2 SET a = a + (select a from table1 where table1.f = table2.f), b = b + (select b from table1 where table1.f = table2.f), c = c + (select c from table1 where table1.f = table2.f), d = d + (select d from table1 where table1.f = table2.f), e = e + (select e from table1 where table1.f = table2.f) WHERE RowId IN (Select table2.RowId from table1 where table1.f = table2.f)
-
==============================
5.쿼리 아래 사용
쿼리 아래 사용
UPDATE table2 SET a = Z.a, b = Z.b, c = Z.c, d = Z.d, e = Z.e FROM (SELECT dst.id, dst.a + src.a AS a, dst.b + src.b AS b, dst.c + src.c AS c, dst.d + src.d AS d, dst.e + src.e AS e FROM table2 AS dst INNER JOIN table1 AS src ON dst.f = src.f )Z WHERE table2.id = z.id
from https://stackoverflow.com/questions/11790595/sqlite-inner-join-update-using-values-from-another-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다른 컬럼에서 순서에 따라 그룹에서 하나 개의 값을 선택 (0) | 2020.06.09 |
---|---|
[SQL] SQL 현재 행의 다음 또는 이전 행에 대해 행을 당겨 (0) | 2020.06.09 |
[SQL] ORDER BY는 먼저 숫자에 따라 알파벳 (0) | 2020.06.09 |
[SQL] 어떻게 열 및 업데이트 테이블의 값을 정렬하려면? (0) | 2020.06.09 |
[SQL] MySQL의 GROUP BY 날짜 시간 +/- 삼초 (0) | 2020.06.09 |