SQL 표준에서 "하위 쿼리가있는 E153 업데이트 가능한 쿼리"란 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2020189

문제

나는 (비싼) SQL 표준이 없습니다. SQL Core/Foundation의 업데이트 가능한 쿼리는 무엇입니까?

PostgreSQL이 지원하지는 않지만 일부 다른 데이터베이스는 그렇습니다. 해당 데이터베이스에서 어떻게 작동하는지에 대한 문서를 지적 할 수 있습니까?

PostgreSQL에는 쿼리 재 작성 및 업데이트 가능한보기가 있습니다 규칙 체계; 이것은 매우 다른가요?

도움이 되었습니까?

해결책

방금 Wikipedia에서 업데이트의 왼쪽에서 선택한 것처럼 보이는이 Oracle 예제를 찾았습니다.

UPDATE (
SELECT *
  FROM articles  
  JOIN classification c 
    ON a.articleID = c.articleID 
) AS a
SET a.[updated_column] = updatevalue
WHERE c.classID = 1

대부분의 데이터베이스는 다음과 같이 쿼리를 작성해야합니다.

UPDATE a
SET a.[updated_column] = updatevalue
FROM articles a 
JOIN classification c 
ON a.articleID = c.articleID 
WHERE c.classID = 1

링크 : 오라클 참조 문서, .

다른 데이터베이스가 이것을 지원합니까? 어디에 문서화되어 있습니까?


이제 표준에 거친 장갑을 얹은 후에는 그냥 인용 할 것입니다.

E153은 다음을 말합니다.

7.12 항, "u003Cqueryn expression> ": ㅏu003Cquery expression> 그럼에도 불구하고 업데이트 가능합니다u003Cwheren clause> au003Csubquery>

쿼리 표현식도 테이블이기 때문에 (직관적이지는 않지만 테이블과 관련된 SQL99 4.16.3 작업)이므로 쿼리 표현식이 "udpatable 테이블"임을 의미합니다. 4.16에 따르면, 나는 그들에게 삽입하고 삭제할 수 있음을 의미합니다.

즉, 위의 것을 실행할 수 있습니다.

DELETE FROM (SELECT * FROM t1 JOIN t2 WHERE t1c1 = t2c3);

SQL99-Foundation 7.11 및 7.12에 포함 된 쿼리 표현식이 업데이트 될 수있는 규칙이 더 있습니다. 그들은 다소 관여합니다. PostgreSQL은 테이블 이름이 아닌 쿼리 표현식을 업데이트 할 수 없습니다. 업데이트 가능한 뷰에서 작업이 수행됩니다. 기능이보기 외부에 얼마나 유용한 지 잘 모르겠지만 표준은 확실히 흥미롭고 예상보다 더 이상합니다.

여기서 외로워요. 내 대답을 최선로 선택합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top