병합 - 테이블의 행을 조건부 삽입, 업데이트 또는 삭제
[withWith_Query
[, ...]]target_table_name
[ *] [[as]target_alias
]data_source
onjoin_condition
when_clause
[...]output_expression
[[as]output_name
] [, ...]]어디data_source
IS :[전용]source_table_name
[ *] | (Source_Query
) [[as]source_alias
] andwhen_clause
IS :일치 할 때 [and조건
] 그런 다음merge_update
|merge_delete
| 아무것도하지 않습니다 |조건
] 그런 다음merge_update
|merge_delete
| 아무것도하지 않습니다 |조건
] 그런 다음merge_insert
| 아무것도하지 않아andmerge_insert
IS :삽입 [(column_name
[, ...])]표현
| 기본값 [, ...]) |andmerge_update
IS :업데이트 세트column_name
= {표현
| 기본값 |column_name
[, ...]) = [row] (표현
| 기본값 [, ...]) |column_name
[, ...]) = (Sub-Select
)andmerge_delete
IS :삭제
병합
식별 된 대상 토토 캔에서 행을 수정하는 동작을 수행합니다target_table_name
, 사용data_source
. 병합
단일 제공SQL조건부로 할 수있는 진술삽입
, 업데이트
또는삭제
행, 여러 절차 언어 진술이 필요한 작업.
먼저병합
명령에서 join을 수행합니다data_source
0 이상의 후보 변경 행을 생성하는 대상 토토 캔에. 각 후보 변경 행에 대해의 상태일치
, 소스와 일치하지 않음
또는[대상별로] 일치하지 않음
한 번만 설정 한 후when
조항은 지정된 순서로 평가됩니다. 각 후보 변경 행에 대해 TRUE로 평가하는 첫 번째 조항이 실행됩니다.when
조항은 후보 변경 행에 대해 실행됩니다.
병합
행동은 정기적 인 것과 동일한 효과를냅니다업데이트
, 삽입
또는삭제
같은 이름의 명령. 해당 명령의 구문은 다릅니다. 특히여기서
절과 토토 캔 이름이 지정되지 않습니다. 모든 동작은 대상 토토 캔을 참조하지만 다른 토토 캔에 대한 수정은 트리거를 사용하여 이루어질 수 있습니다.
언제아무것도하지 않습니다
지정되어 소스 행이 건너 뜁니다. 행동이 지정된 순서로 평가되므로아무것도하지 않습니다
더 세밀한 취급 처리 전에 비 관심있는 소스 행을 건너 뛰는 데 유용 할 수 있습니다.
선택 사항반환
절의 원인병합
삽입, 업데이트 또는 삭제 된 각 행을 기반으로 값을 계산하고 반환합니다. 소스 또는 대상 테이블의 열을 사용한 모든 표현식 또는merge_action ()
함수를 계산할 수 있습니다.삽입
또는업데이트
동작이 수행되면 대상 토토 캔 열의 새 값이 사용됩니다. A삭제
가 수행되면 대상 토토 캔 열의 기존 값이 사용됩니다. 의 구문반환
목록은 출력 목록의 목록과 동일합니다select
.
별도의 것이 없습니다병합
특권. 업데이트 작업을 지정하면가 있어야합니다.업데이트
|SET
절. 삽입 작업을 지정하면가 있어야합니다.삽입
대상 테이블의 권한. 삭제 조치를 지정하면가 있어야합니다.삭제
대상 토토 캔의 권한. A를 지정하는 경우아무것도하지 않습니다
행동, 당신은가 있어야합니다.select
대상 토토 캔의 최소 한 열의 특권. 당신은 또한 필요합니다select
의 모든 열의 특권data_source
및 대상 표의조건
(포함join_condition
) 또는표현
. 권한은 명세서 시작시 한 번 테스트되며 특정 여부를 확인합니다when
조항이 실행됩니다.
병합
대상 테이블이 구체화 된보기, 외국 표, 또는 규칙에 정의 된 규칙이있는 경우 지원되지 않습니다..
With_Query
thewith
절에서 이름으로 언급 할 수있는 하나 이상의 하위 쿼리를 지정할 수 있습니다.병합
쿼리. 보다PostgreSQL : 문서 : 17 : 7.8. 스포츠 토토 사이트와 함께 (공통 테이블 표현식)andselect자세한 내용. 참고재귀
병합
.
target_table_name
대상 테이블의 이름 (선택적으로 스키마 자격) 또는 병합보기. 만약에전용
테이블 이름 앞에 지정되어 있으며, 일치 행이 명명 된 테이블에서만 업데이트되거나 삭제됩니다. 만약에전용
지정되지 않았으며, 일치 행은 이름이 지정된 테이블에서 상속되는 테이블에서 업데이트되거나 삭제됩니다. 선택적으로,*
토토 캔 이름 후에 지정하여 자손 토토 캔이 포함되어 있음을 명시 적으로 표시 할 수 있습니다. 그만큼전용
키워드 및*
옵션 삽입 동작에 영향을 미치지 않으며 항상 이름이 지정된 테이블에만 삽입됩니다.
iftarget_table_name
보기입니다. NO로 자동 업데이트 할 수 있어야합니다대신
트리거 또는 가져야합니다대신
모든 유형의 행동에 대한 트리거 (삽입
, 업데이트
및삭제
) 지정when
조항. 규칙이있는 견해는 지원되지 않습니다.
target_alias
대상 토토 캔의 대체 이름. 별칭이 제공되면 토토 캔의 실제 이름을 완전히 숨 깁니다.foo로 foo로 합병하여 f
, 나머지병합
진술은이 표를로 언급해야합니다.f
notfoo
.
source_table_name
소스 테이블,보기 또는 전환 테이블의 이름 (선택적으로 스키마 자격). 만약에전용
테이블 이름 앞에 지정되어 있으며, 일치 행은 명명 된 테이블에서만 포함됩니다. 만약에전용
지정되지 않았으며, 일치 행은 이름이 지정된 테이블에서 상속되는 테이블에서도 포함됩니다. 선택적으로,*
토토 캔 이름 후에 지정하여 자손 토토 캔이 포함되어 있음을 명시 적으로 표시 할 수 있습니다.
Source_Query
query (select
Statement 또는값
statement) 대상 테이블에 병합 될 행을 제공하는 것. 참조selectStatement 또는값구문 설명에 대한 명령문.
source_alias
데이터 소스의 대체 이름. 별칭이 제공되면 토토 캔의 실제 이름이나 쿼리가 발행되었다는 사실을 완전히 숨 깁니다.
join_condition
join_condition
유형의 값을 초래하는 표현식입니다부울
(A와 유사여기서
절)에서 어떤 행을 지정하는.data_source
대상 테이블의 행을 일치시킵니다.
일치하려는 대상 테이블의 열만data_source
행에 행이 나타나야합니다join_condition
. join_condition
대상 테이블의 열만 참조하는 하위 표현은 종종 놀라운 방식으로 어떤 조치를 취할 수 있는지에 영향을 줄 수 있습니다.
둘 다소스와 일치하지 않을 때
and[target에 의해] 일치하지 않을 때
조항이 지정되어 있습니다.병합
명령은 a를 수행합니다.full
사이에 가입data_source
및 대상 토토 캔. 이것이 작동하기 위해서는 적어도 하나join_condition
Subexpression은 해시 조인을 지원할 수있는 연산자를 사용해야합니다. 그렇지 않으면 모든 하위 표현은 병합 조인을 지원할 수있는 연산자를 사용해야합니다.
when_clause
적어도 하나when
조항이 필요합니다.
thewhen
조항은 지정할 수 있습니다일치 할 때
, 소스와 일치하지 않을 때
또는[target에 의해] 일치하지 않을 때
.SQL표준 전용 정의일치 할 때
and일치하지 않을 때
(일치하는 대상 행을 의미하지 않도록 정의 됨).소스와 일치하지 않을 때
에 대한 확장입니다.SQL표준, 추가 옵션대상
to일치하지 않을 때
, 그 의미를보다 명확하게 만들려면
when
조항을 지정합니다일치 할 때
그리고 후보 변경 행은에서 행과 일치합니다.data_source
대상 테이블의 행으로when
조항이 실행되면조건
결석하거나 평가합니다true
.
when
조항을 지정합니다소스와 일치하지 않을 때
그리고 후보 변경 행은 대상 테이블의 행을 나타냅니다.data_source
, Thewhen
조항이 실행되면조건
결석하거나 평가합니다true
.
when
조항을 지정합니다[target에 의해] 일치하지 않을 때
그리고 후보 변경 행은의 행을 나타냅니다.data_source
대상 테이블의 행과 일치하지 않는when
조항이 실행되면조건
결석하거나 평가합니다true
.
조건
유형 값을 반환하는 표현식부울
. A에 대한이 표현이 있다면when
절이 반환true
, 그러면 해당 조항에 대한 조치가 해당 행에 대해 실행됩니다.
a일치 할 때
절은 소스와 대상 관계의 열을 참조 할 수 있습니다. A의 상태소스와 일치하지 않을 때
절은 정의에 따라 일치하는 소스 행이 없기 때문에 대상 관계의 열만 참조 할 수 있습니다. A의 상태[target에 의해] 일치하지 않을 때
절은 정의에 따라 일치하는 대상 행이 없기 때문에 소스 관계의 열만 참조 할 수 있습니다. 대상 테이블의 시스템 속성 만 액세스 할 수 있습니다.
merge_insert
AN의 사양삽입
한 행을 대상 테이블에 삽입하는 동작. 대상 열 이름은 어떤 순서로든 나열 될 수 있습니다.
명시 적 또는 암시 적 열 목록에 존재하지 않는 각 열에는 기본값이 채워집니다.
대상 테이블이 분할 된 테이블 인 경우 각 행은 적절한 파티션으로 라우팅되어 삽입됩니다. 대상 테이블이 파티션 인 경우 입력 행이 파티션 제약 조건을 위반하면 오류가 발생합니다.
열 이름이 두 번 이상 지정되지 않을 수 있습니다.삽입
동작은 하위 선택을 포함 할 수 없습니다.
하나만값
절을 지정할 수 있습니다. 그만큼값
조항은 정의에 따라 대상 행이 일치하지 않기 때문에 소스 관계의 열만 참조 할 수 있습니다.
merge_update
AN의 사양업데이트
대상 테이블의 현재 행을 업데이트하는 조치. 열 이름은 두 번 이상 지정되지 않을 수 있습니다.
토토 캔 이름이나 A여기서
조항이 허용됩니다.
merge_delete
지정삭제
대상 테이블의 현재 행을 삭제하는 동작. 일반적으로 A와 같이 테이블 이름이나 다른 조항을 포함하지 마십시오.삭제명령.
column_name
대상 테이블의 열 이름. 열 이름은 필요한 경우 하위 필드 이름 또는 배열 첨자로 자격을 갖추 수 있습니다.
시스템 가치 재정의
이 조항이 없으면 명시 적 값을 지정하는 것은 오류입니다 (기본값
) 정의 된 신원 열에 대한항상 생성
. 이 조항은 해당 제한을 무시합니다.
사용자 값 재정
이 조항이 지정된 경우 정의 된 신분 열에 제공되는 값기본적으로 생성
무시되고 기본 시퀀스 생성 값이 적용됩니다.
기본값
모든 열에는 기본값으로 채워집니다. (an재정의
조항은이 양식에서 허용되지 않습니다.)
표현
열에 할당하는 표현식. A에서 사용되는 경우일치 할 때
절에서, 표현식은 대상 테이블의 원래 행에서 값을 사용할 수 있고data_source
행. A에서 사용되는 경우소스와 일치하지 않을 때
절에서 표현식은 대상 테이블의 원래 행에서만 값을 사용할 수 있습니다. A에서 사용되는 경우[target에 의해] 일치하지 않을 때
절, 표현식은에서만 값 만 사용할 수 있습니다.data_source
Row.
기본값
열을 기본값으로 설정합니다 (NULL
특정 기본 표현식이 할당되지 않은 경우).
Sub-Select
A select
이전의 괄호 화 된 열 목록에 나열된 많은 출력 열을 생성하는 하위 쿼리. 하위 쿼리는 실행될 때 1 행을 넘어서는 안됩니다.일치 할 때
절에서 하위 쿼리는 대상 테이블의 원래 행의 값을 참조 할 수 있고의 값을 참조 할 수 있습니다.data_source
행. A에서 사용되는 경우소스와 일치하지 않을 때
절에서 하위 쿼리는 대상 테이블의 원래 행의 값 만 참조 할 수 있습니다.
output_expression
계산 및 반환 할 표현식병합
각 행 변경 후 명령 (삽입, 업데이트 또는 삭제 여부). 표현식은 소스 또는 대상 테이블의 열 또는의 열을 사용할 수 있습니다.merge_action ()
실행 된 작업에 대한 추가 정보를 반환 할 수있는 기능.
쓰기*
소스 테이블에서 모든 열을 반환하고 대상 테이블의 모든 열이 뒤 따릅니다. 소스 및 대상 테이블이 동일한 열을 많이 갖는 것이 일반적이기 때문에 종종 많은 복제로 이어질 것입니다.*
소스 또는 대상 테이블의 이름 또는 별칭이 포함되어 있습니다.
output_name
반환 된 열에 사용할 이름.
성공적인 완료시, A병합
명령은 양식의 명령 태그를 반환
병합Total_Count
theTotal_Count
총 행이 변경되었는지 (삽입, 업데이트 또는 삭제하든). 만약에Total_Count
is 0, 어떤 식 으로든 행이 변경되지 않았습니다.
병합
명령이 포함되어반환
절에서 결과는 a의 결과와 유사합니다.select
반환
명령에 의해 삽입, 업데이트 또는 삭제 된 행 위에 계산 된 목록.
다음 단계는 실행 중에 발생합니다병합
.
성능이전 명령문
지정된 모든 조치에 대한 트리거when
Clauses Match.
소스에서 대상 테이블로 조인을 수행합니다. 결과 쿼리는 정상적으로 최적화되며 일련의 후보 변경 행을 생성합니다.
각 행이 있는지 평가합니다일치
, 소스와 일치하지 않음
또는[대상별로] 일치하지 않음
.
각각 테스트when
진실이 반환 될 때까지 지정된 순서의 조건.
조건이 진실을 반환하면 다음 조치를 수행하십시오.
성능전 행
액션의 이벤트 유형에 대한 발사 트리거.
지정된 조치를 수행하여 대상 테이블에서 확인 제약 조건을 호출합니다.
성능After Row
액션의 이벤트 유형에 대한 발사 트리거.
대상 관계가보기 인 경우대신 행
액션의 이벤트 유형에 대한 트리거, 대신 작업을 수행하는 데 사용됩니다.
성능이후의 진술
실제로 발생하는지 여부에 관계없이 지정된 작업에 대한 트리거. 이것은 an의 행동과 유사합니다업데이트
행을 수정하지 않는 진술.
요약하면, 이벤트 유형에 대한 명세서 트리거 (예 :삽입
) 우리가 언제마다 해고 될 것입니다지정그런 종류의 행동. 대조적으로,로드 레벨 트리거는 특정 이벤트 유형에 대해서만 발사됩니다실행. 그래서 A병합
Command가 Fire Statement Triggers 둘 다에 대한 Triggers업데이트
and삽입
업데이트
행 트리거가 해고되었습니다.
가입이 각 대상 행에 대해 최대 하나의 후보 변경 행을 생성해야합니다. 다시 말해, 대상 행은 둘 이상의 데이터 소스 행에 결합해서는 안됩니다.병합
. 반복적 인 행동이 인 경우삽입
, 이로 인해 고유성 위반이 발생하지만 반복업데이트
또는삭제
추기경 위반을 일으킬 것입니다. 후자의 행동은에 의해 필요합니다.SQL표준. 이것은 역사적으로 다릅니다PostgreSQL조인 동작에서업데이트
and삭제
동일한 행을 수정하려는 두 번째 및 후속 시도가 단순히 무시되는 진술.
if awhen
조항은 an을 생략합니다.및
하위 클라스, 그것은 그러한 종류의 최종 도달 조항이됩니다 (일치
, 소스와 일치하지 않음
또는[대상별로] 일치하지 않음
). 나중에when
그러한 종류의 조항은 지정 될 수 없으며 오류가 발생합니다. 최종 도달 조항이 어느 한 종류로 지정되지 않으면 후보 변경 행에 대한 조치를 취하지 않을 수 있습니다.
데이터 소스에서 행이 생성되는 순서는 기본적으로 불확실합니다. 에이Source_Query
필요한 경우 일관된 순서를 지정하는 데 사용될 수 있으며, 이는 동시 거래 사이의 교착 상태를 피하기 위해 필요할 수 있습니다.
언제병합
대상 테이블을 수정하는 다른 명령과 동시에 실행됩니다. 일반적인 트랜잭션 격리 규칙이 적용됩니다. 보다섹션 13.2각 격리 수준에서 동작에 대한 설명. 사용을 고려하고 싶을 수도 있습니다.삽입 ... 충돌
실행 능력을 제공하는 대안 진술로서업데이트
동시에삽입
발생합니다. 두 문장 유형 사이에는 다양한 차이점과 제한이 있으며 교환 할 수 없습니다.
유지 보수 수행customer_accounts
신규 기반최근_transactions
.
Customer_Account Ca로 병합
이것은 다음 진술과 정확히 동일하다는 것을 알 수 있습니다.일치
실행 중에 결과가 변경되지 않습니다.
Customer_Account Ca로 병합
재고량과 함께 새 재고 품목을 삽입하려고 시도합니다. 항목이 이미 존재하는 경우 대신 기존 품목의 재고 수를 업데이트하십시오.
와인으로 합병 w
theWine_stock_changes
예를 들어 최근 데이터베이스에로드 된 임시 토토 캔이 될 수 있습니다.
업데이트와인
교체 와인리스트를 기준으로 새 재고에 대한 행을 삽입하고, 수정 된 재고 항목을 업데이트하고, 새 목록에없는 와인을 삭제합니다.
와인으로 합병 w
이 명령은에 부합합니다.SQL표준.
thewith
절,소스
and대상
예선일치하지 않을 때
, 아무것도하지 않습니다
행동,반환
조항은에 대한 확장입니다.SQL표준.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면