[SQL] SELECT 절에서 여러 설정을 돌려주는 기능을위한 예상되는 동작은 무엇인가?
SQLSELECT 절에서 여러 설정을 돌려주는 기능을위한 예상되는 동작은 무엇인가?
예를 보려면, 나는 두 세트 - 리턴하는 함수의 결과와 "크로스 조인을"얻으려고하지만, 어떤 경우에는 내가 "크로스 가입"하지 않습니다
동작 1 : 세트의 길이가 동일한 경우, 각 세트의 항목으로 항목을 일치
postgres=# SELECT generate_series(1,3), generate_series(5,7) order by 1,2; generate_series | generate_series -----------------+----------------- 1 | 5 2 | 6 3 | 7 (3 rows)
행동 2 : 세트의 길이가 다른 경우, 그것은 "크로스 조인"는 세트에요
postgres=# SELECT generate_series(1,2), generate_series(5,7) order by 1,2; generate_series | generate_series -----------------+----------------- 1 | 5 1 | 6 1 | 7 2 | 5 2 | 6 2 | 7 (6 rows)
나는 깡통 누군가가 예상되는 동작을 설명 내가 여기없는 이해 뭔가를 생각 해요?
또 다른 예를 들어, 심지어 괴상 :
postgres=# SELECT generate_series(1,2) x, generate_series(1,4) y order by x,y; x | y ---+--- 1 | 1 1 | 3 2 | 2 2 | 4 (4 rows)
내가 이상적으로 문서 링크 (들)로, 제목에 질문에 대한 답을 찾고 있어요.
해결법
-
==============================
1.작은 세트 (들)에 대해 NULL 값을 추가한다. generate_series와 데모 () :
작은 세트 (들)에 대해 NULL 값을 추가한다. generate_series와 데모 () :
SELECT generate_series( 1, 2) AS row2 , generate_series(11, 13) AS row3 , generate_series(21, 24) AS row4;
row2 | row3 | row4 -----+------+----- 1 | 11 | 21 2 | 12 | 22 null | 13 | 23 null | null | 24
여기 dbfiddle
포스트 그레스 (10)에 대한 매뉴얼 :
이것은 전통적으로 이상한 행동을 종료합니다.
결과 행의 수 (다소 의외로!) 동일한 SELECT 목록의 모든 세트들의 최소 공배수이다. 데모 (! 모든 설정-크기에 더 공약수가없는 경우에만 가입 십자가 같은 역할) :
SELECT generate_series( 1, 2) AS row2 , generate_series(11, 13) AS row3 , generate_series(21, 24) AS row4;
row2 | row3 | row4 -----+------+----- 1 | 11 | 21 2 | 12 | 22 1 | 13 | 23 2 | 11 | 24 1 | 12 | 21 2 | 13 | 22 1 | 11 | 23 2 | 12 | 24 1 | 13 | 21 2 | 11 | 22 1 | 12 | 23 2 | 13 | 24
여기 dbfiddle
포스트 그레스 9.6 장에 대한 매뉴얼에 문서화 세트 반환 SQL 함수
-
==============================
2.나는이에 대한 모든 문서를 찾을 수 없습니다. 그러나, 나는 내가 관찰하는 동작을 설명 할 수 있습니다.
나는이에 대한 모든 문서를 찾을 수 없습니다. 그러나, 나는 내가 관찰하는 동작을 설명 할 수 있습니다.
설정된 생성 함수 각 리턴 행 유한 수. 모두가 다시 첫 행에있을 때 또는, 가능성 정지 - 포스트 그레스 그들 모두가 자신의 마지막 행에 때까지 세트 생성 기능을 실행하는 것 같다. 기술적으로,이 시리즈의 길이의 최소 공배수 (LCM) 일 것이다.
나는이 경우 이유를 모르겠어요. 내가 코멘트에서 말하는 것처럼 그리고, 나는 일반적으로 절에서의 기능을 넣어 더 나은 생각합니다.
-
==============================
3.설명서의 문제에 대한 유일한 참고가있다. 나는이 설명 된 동작을 설명 여부 확실하지 않다. 아마도 더 중요한 것은 이러한 기능 사용이되지 않습니다이다 :
설명서의 문제에 대한 유일한 참고가있다. 나는이 설명 된 동작을 설명 여부 확실하지 않다. 아마도 더 중요한 것은 이러한 기능 사용이되지 않습니다이다 :
from https://stackoverflow.com/questions/39863505/what-is-the-expected-behaviour-for-multiple-set-returning-functions-in-select-cl by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server의 문자열 CONCAT 필드 값 (0) | 2020.04.16 |
---|---|
[SQL] 그룹 당 하나 개의 칼럼의 최대 값을 반환 행 [중복] (0) | 2020.04.16 |
[SQL] 어떻게 SQL에서 INSERT에 대한 중복 값을 피하기 위해? (0) | 2020.04.16 |
[SQL] 단지 MySQL의 쿼리를 사용하여 중복 제거? (0) | 2020.04.16 |
[SQL] 테이블 사용 ROWNUM의 두 번째 행을 선택 (0) | 2020.04.16 |