복붙노트

[SQL] SELECT 유형의 쿼리는 해당이 중첩 될 수 있습니다 유형?

SQL

SELECT 유형의 쿼리는 해당이 중첩 될 수 있습니다 유형?

그것은 다른 쿼리에 내장 된 비 선택 쿼리를 (갱신, 삽입, 삭제)이 할 수 있습니까?

(선별 내부에 삽입)와 같은 뭔가

A single query:

select such,and,such from .... where .... insert into .... ;

해결법

  1. ==============================

    1.CTE는 (MySQL을 제외한 모든 주요 현대 RDBMS처럼) 포스트 그레스에서 (공통 테이블 식)이있다. 데이터 수정 CTE를 포함 버전 9.1입니다. 사람들은 "중첩"할 수 있습니다. 업데이트 : MySQL의 8.0 마침내 열팽창 계수를 추가합니다.

    CTE는 (MySQL을 제외한 모든 주요 현대 RDBMS처럼) 포스트 그레스에서 (공통 테이블 식)이있다. 데이터 수정 CTE를 포함 버전 9.1입니다. 사람들은 "중첩"할 수 있습니다. 업데이트 : MySQL의 8.0 마침내 열팽창 계수를 추가합니다.

    달리 하위 쿼리의 열팽창 계수는 최적화 장벽으로 포즈. 쿼리 계획은 기본 명령이나 재주문에 인라인 사소한하지 명령은 메인 쿼리 및 CTE를 사이에 조인 할 수 있습니다. 동일 서브 쿼리 가능하다. 성능 (매우) 좋은 나 (매우) 나쁜 수 있습니다, 그것은 의존한다. 어느 쪽이든, 열팽창 계수는 더 많은 오버 헤드 (성능 비용) 서브 쿼리보다 약간 필요합니다.

    귀하의 질문은 대답에 아마 충분 위, 아주 기본적인 것입니다. 그러나 나는 (구문을 보여주고 코드 예제) 고급 사용자를위한 비트를 추가합니다.

    쿼리의 모든 열팽창 계수는 동일한 데이터베이스 스냅 샷을 기반으로하고 있습니다. 다음 CTE는 이전의 열팽창 계수의 출력 (내부 임시 테이블을) 다시 사용할 수 있지만, 기본 테이블에 대한 효과는 다른 CTE를위한 보이지 않습니다. 그것은 아무것도 변경하지 않기 때문에, SELECT에 대한 irrelvant 그냥 스냅 샷에서 읽고 - 뭔가 INSERT, UPDATE, DELETE에 대한 RETURNING 절을 반환하지 않는 다수의 열팽창 계수의 순서는 임의적이다.

    즉, 동일한 행에 영향을 미치는 것 여러 업데이트에 미묘한 영향을 미칠 수 있습니다. 단 하나의 업데이트는 각 행에 영향을 줄 수 있습니다. 어느 하나가 열팽창 계수의 순서에 의해 영향을 받는다.

    결과를 예측하려고 :

    CREATE TEMP TABLE t (t_id int, txt text);
    INSERT INTO t VALUES (1, 'foo'), (2, 'bar'), (3, 'baz');
    
    WITH sel AS (SELECT * FROM t)
       , up1 AS (UPDATE t SET txt = txt || '1' WHERE t_id = 1 RETURNING *)
       , up2 AS (UPDATE t SET txt = t.txt || '2'
                 FROM   up1
                 WHERE  up1.t_id = t.t_id
                 RETURNING t.*)
       , ins AS (INSERT INTO t VALUES (4, 'bamm'))
       , up3 AS (UPDATE t SET txt = txt || '3' RETURNING *)
    SELECT 'sel' AS source, * FROM sel
    UNION ALL
    SELECT 'up1' AS source, * FROM up1
    UNION ALL
    SELECT 'up2' AS source, * FROM up2
    UNION ALL
    SELECT 'up3' AS source, * FROM up3
    UNION ALL
    SELECT 't'   AS source, * FROM t;
    

    SQL 바이올린

    실망하지 마십시오, 내가 할 수 있었던 사람 여기에 많은 사람들이 거기에 의심한다. :) 이것의 요점 : 열팽창 계수의 명령을 충돌하지 마십시오.

  2. from https://stackoverflow.com/questions/22749253/are-select-type-queries-the-only-type-that-can-be-nested by cc-by-sa and MIT license