[SQL] MySQL은 / SQL : 업데이트 된 테이블 자체에서 상관 하위 쿼리와 업데이트
SQLMySQL은 / SQL : 업데이트 된 테이블 자체에서 상관 하위 쿼리와 업데이트
내가 예를 사용하여 설명하려고 할 것이라는 일반적인 질문이 있습니다.
"ID", "이름", "카테고리", "외모"와 "비"나는 필드가있는 테이블을 말해봐
아이디어는 내가 여러 항목, 하나의 범주 및하세요 ""여러 번 관련된 각을 가지고있다. 비율 필드는 범주의 항목 모습의 총 개수 중 각 항목의 출연 비율을 포함해야한다.
의사 코드에서 내가 필요한 것은 다음과 같다 :
지금은 하나의 업데이트 쿼리와이를 달성하기 위해 노력하고있어,하지만 그것을 할 수없는 것. 내가 어떻게해야 생각하는 것입니다 :
update Table T
set T.ratio = T.appearances /
(
select sum(S.appearances)
from Table S
where S.id = T.id
)
그러나 MySQL은 업데이트 열의 별명 T를 허용하지 않습니다, 나는이 달성의 다른 방법을 찾지 못했습니다.
어떤 아이디어?
해결법
-
==============================
1.내가받은 두 답변 (나는 내 자신을 썼다 그래서 어느 것도이 완료), 내가 결국 한 것이 아니라 다음입니다 다음 :
내가받은 두 답변 (나는 내 자신을 썼다 그래서 어느 것도이 완료), 내가 결국 한 것이 아니라 다음입니다 다음 :
UPDATE Table AS target INNER JOIN ( select category, appearances_sum from Table T inner join ( select category as cat, sum(appearances) as appearances_sum from Table group by cat ) as agg where T.category = agg.cat group by category ) as source ON target.category = source.category SET target.probability = target.appearances / source.appearances_sum
그것은 매우 빠르게 작동합니다. 내가 조인을 고수하고있어, 그래서 나는 또한 상관 서브 쿼리로 시도했지만 훨씬 느린 (수십 배)이었다.
-
==============================
2.사용 UPDATE 직후에 조인 : 참조 설명서 - 13.2.11 UPDATE 구문
사용 UPDATE 직후에 조인 : 참조 설명서 - 13.2.11 UPDATE 구문
그래서 내부 UPDATE의 표는에 표 2에 가입 .... 세트 값 = table1.foo 여기서 table2.bla = someothervalue
사물의 이러한 종류로, 항상 설명서를 보면. 그것이 올바른 신택스를 얻을 어려운 안되도록 MySQL은, 적절한 메뉴얼 갖는다)
-
==============================
3.이것은이 MSSQL에서 수행하는 방법, 나는 MySQL이 동일하거나 유사한 생각 :
이것은이 MSSQL에서 수행하는 방법, 나는 MySQL이 동일하거나 유사한 생각 :
create table T (id int, ratio float, appearances int) insert T values (1, null, 2) insert T values (1, null, 3) update T set ratio = cast(appearances as float)/ agg.appearancesSum from T join ( select id, sum(appearances) as appearancesSum from T group by id ) as agg on t.id = agg.id
from https://stackoverflow.com/questions/839938/mysql-sql-update-with-correlated-subquery-from-the-updated-table-itself by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 ALTER TABLE 문에서 'DELETE CASCADE ON'추가 (0) | 2020.05.10 |
---|---|
[SQL] 오라클에서 익명 테이블이나 VARRAY 유형 (0) | 2020.05.10 |
[SQL] 영숫자는 PostgreSQL을 함께 정렬 (0) | 2020.05.09 |
[SQL] 어떻게 데이터베이스에서 값을 채우기 HTML 드롭 다운 목록에 (0) | 2020.05.09 |
[SQL] 열 값이 변경 선택 행 (0) | 2020.05.09 |