절을 사용하여 문 업데이트
의 스택과 구를 사용하여 결과를 작성하는 스크립트가 있으며, 그 결과를 표에 씁니다.도저히 생각이 안 나는데, 누가 올바른 방향을 가르쳐 줄 수 있나요?
다음은 무엇을 하고 싶은지 나타내는 간단한 예입니다.
with comp as (
select *, 42 as ComputedValue from mytable where id = 1
)
update t
set SomeColumn = c.ComputedValue
from mytable t
inner join comp c on t.id = c.id
실제에는 모두 서로 참조하는 절이 상당히 많기 때문에 실제로 with 절을 사용하는 제안은 중첩된 하위 쿼리로 리팩터링하는 것보다 매우 선호됩니다.
만약 나를 쫓아오는 사람이 있다면, 이것은 나에게 효과가 있는 대답이다.
메모: 사용 전에 코멘트를 읽어주세요.완료되지 않았습니다.업데이트 쿼리에 대한 최선의 조언은 SqlServer로 전환하는 것입니다.)
update mytable t
set z = (
with comp as (
select b.*, 42 as computed
from mytable t
where bs_id = 1
)
select c.computed
from comp c
where c.id = t.id
)
행운을 빌어요,
GJ
인라인 뷰에서는 WITH 구문이 유효한 것처럼 보입니다.
UPDATE (WITH comp AS ...
SELECT SomeColumn, ComputedValue FROM t INNER JOIN comp ...)
SET SomeColumn=ComputedValue;
하지만 빠른 테스트에서는 항상 실패했어요ORA-01732: data manipulation operation not legal on this viewWITH 조항을 삭제하도록 다시 작성하면 성공했지만요.따라서 리팩터링이 Oracle의 키 보존을 보장하는 기능을 방해할 수 있습니다.
단, MERGE를 사용할 수 있습니다.게시한 간단한 예제를 사용하면 WITH 절이 필요하지 않습니다.
MERGE INTO mytable t
USING (select *, 42 as ComputedValue from mytable where id = 1) comp
ON (t.id = comp.id)
WHEN MATCHED THEN UPDATE SET SomeColumn=ComputedValue;
하지만 더 복잡한 서브쿼리가 있다는 건 알고 있습니다서브쿼리를 작성하실 수 있을 것 같습니다.USING복수 포함, 임의로 복잡한 절WITH절을 참조하십시오.
항상 다음과 같은 작업을 수행할 수 있습니다.
update mytable t
set SomeColumn = c.ComputedValue
from (select *, 42 as ComputedValue from mytable where id = 1) c
where t.id = c.id
이제 업데이트 내 스테이트먼트와 함께 사용할 수도 있습니다.
update mytable t
set SomeColumn = c.ComputedValue
from (with abc as (select *, 43 as ComputedValue_new from mytable where id = 1
select *, 42 as ComputedValue, abc.ComputedValue_new from mytable n1
inner join abc on n1.id=abc.id) c
where t.id = c.id
언급URL : https://stackoverflow.com/questions/5380559/update-statement-using-with-clause
'source' 카테고리의 다른 글
| Scala: JSON을 케이스 클래스로 직접 해석 (0) | 2023.04.03 |
|---|---|
| set 객체는 JSON을 직렬화할 수 없습니다. (0) | 2023.04.03 |
| 특정 연락처 7 폼의 wpcf7mailsent 타깃 (0) | 2023.04.03 |
| 학습되지 않은 구문 오류:위치 0의 JSON에 예기치 않은 토큰 u가 있습니다. (0) | 2023.04.03 |
| JSON 스키마를 사용하여 값을 문자열 또는 null로 지정합니다. (0) | 2023.04.03 |