SQL유니온구조물은 일치해야 합니다
서로 다른 유형이 단일 결과 세트가 될 수 있습니다. 는
해결 알고리즘은 각 출력 열에 별도로 적용됩니다.
노조 질의.교차그리고제외구조는 서로 다른 유형을 해결합니다.
와 같은 방식으로유니온.사례, 어레이, 값, 가장 훌륭함그리고최소구조물은 동일한 것을 사용합니다
구성 요소 표현식을 일치시키고 선택하는 알고리즘
결과 데이터 유형입니다.
다음에 대한 유형 확인유니온, 사례및 관련 구문
모든 입력이 동일한 유형이지만 그렇지 않은 경우알 수 없음, 해당 유형으로 해결하세요.
입력이 도메인 유형인 경우, 이를 다음의 것으로 취급합니다. 모든 후속 단계에 대한 도메인의 기본 유형입니다.[1]
모든 입력이 유형인 경우알 수 없음, 해결하다 유형으로텍스트(선호되는 유형 문자열 카테고리). 그렇지 않으면,알 수 없음입력 무시됩니다.
알 수 없는 입력이 모두 동일한 유형 카테고리가 아닌 경우, 실패하다.
선호되는 첫 번째 알 수 없는 입력 유형을 선택하세요. 해당 카테고리가 있으면 입력하세요.
그렇지 않으면 다음을 허용하는 알 수 없는 마지막 입력 유형을 선택하십시오. 이전의 알 수 없는 입력은 모두 암시적으로 변환됩니다. 그것. (항상 그러한 유형이 있습니다. 왜냐하면 적어도 첫 번째 유형은 목록은 이 조건을 충족해야 합니다.)
모든 입력을 선택한 유형으로 변환합니다. 없으면 실패 주어진 입력을 선택한 유형으로 변환합니다.
몇 가지 예가 이어집니다.
예제 10-10. 과소 지정 유형의 유형 확인 연합
텍스트 'a' AS "텍스트" 선택 UNION SELECT 'b'; 텍스트 ------ 에 비 (2행)
여기서는 알 수 없는 유형 리터럴'b'할 것이다 유형을 결정하십시오텍스트.
예제 10-11. Simple Union의 유형 확인
SELECT 1.2 AS "숫자" UNION SELECT 1;
숫자
---------
1
1.2
(2행)
리터럴1.2유형입니다숫자및정수값1암시적으로 캐스트 가능숫자, 해당 유형이 사용됩니다.
예제 10-12. 전치된 공용체의 유형 확인
SELECT 1 AS "실제" UNION SELECT CAST('2.2' AS REAL);
진짜
------
1
2.2
(2행)
여기, 유형 이후진짜암시적으로는 불가능합니다. 으로 전송됨정수하지만정수암시적으로 캐스팅될 수 있음진짜, 통합 결과 유형은 다음과 같이 확인됩니다.진짜.
예 10-13. 중첩된 공용체의 유형 확인
SELECT NULL UNION SELECT NULL UNION SELECT 1; 오류: UNION 유형의 텍스트와 정수는 일치할 수 없습니다.
이 실패는 다음과 같은 이유로 발생합니다.PostgreSQL여러 개를 처리유니언s는 쌍별 연산의 중첩입니다. 즉, 이 입력은 다음과 같습니다.
(SELECT NULL UNION SELECT NULL) UNION SELECT 1;
내부유니언발산으로 해결되었습니다. 유형텍스트, 주어진 규칙에 따라 위. 그러면 바깥쪽유니온다음의 입력이 있습니다 유형텍스트그리고정수, 관찰된 오류로 이어집니다. 문제는 다음을 확인하여 해결할 수 있습니다. 가장 왼쪽이요유니언최소 하나 이상 있음 원하는 결과 유형을 입력하세요.
교차그리고제외작업도 마찬가지로 쌍으로 해결됩니다. 그러나 이 섹션에 설명된 다른 구성은 다음을 고려합니다. 모든 입력을 하나의 해결 단계로 처리합니다.
| [1] |
연산자와 도메인 입력을 처리하는 것과 다소 비슷합니다. 함수, 이 동작을 통해 도메인 유형을 보존할 수 있습니다. a를 통해유니온또는 유사한 구문이므로 사용자가 모든 입력이 제대로 이루어졌는지 주의 깊게 확인하는 한 암시적으로 또는 명시적으로 해당 유형을 의미합니다. 그렇지 않으면 도메인의 기본 유형이 선호됩니다. |