표준에 따라 :
SELECT 1 FROM r HAVING 1=1
방법
SELECT 1 FROM r GROUP BY () HAVING 1=1
인용 ISO / IEC 9075-2 : 2011 7.10 구문 규칙 1 (HAVING 절 정의의 일부) :
하자 HC일 <having clause>. 하자 TE수 <table expression>즉시 포함 HC. 을 TE즉시 포함하지 않으면
<group by clause>" GROUP BY ()"가 암시 적입니다. 하자 T에 의해 정의 된 테이블의 기술자가 될 <group by clause> GBC즉시에 포함 TE하고 LET R의 결과 GBC.
그래야 꽤 분명합니다.
주장 : 1=1진정한 검색 조건입니다. 나는 이것을 인용하지 않을 것이다.
지금
SELECT 1 FROM r GROUP BY () HAVING 1=1
동등하다
SELECT 1 FROM r GROUP BY ()
인용 ISO / IEC 9075-2 : 2011 7.10 일반 규칙 1 :
의 <search condition>각 그룹에 대해 평가됩니다 R. 의 결과는 <having clause>R의 결과 <search condition>가 True 인 R 그룹의 그룹화 된 테이블입니다
.
논리 : 검색 조건이 항상 참이므로 결과는 R식에 의한 그룹의 결과 인입니다.
다음은 일반 규칙 7.9에서 발췌 한 것입니다 (GROUP BY CLAUSE 정의).
1) no <where clause>가 지정되면 T앞의 결과가된다 <from clause>. 그렇지 않으면 T앞의 결과를 보자 <where clause>.
2) 사례 :
a) 그룹화 열이 없으면 결과 는 유일한 그룹 <group by clause>으로 구성된 그룹화 된 테이블 T입니다.
따라서 우리는 결론을 내릴 수 있습니다
FROM r GROUP BY ()
행이 0 인 한 그룹으로 구성된 그룹화 된 테이블이됩니다 (R이 비어 있으므로).
쿼리 규정 (일명 SELECT 문)을 정의하는 7.12의 일반 규칙에서 발췌 한 내용 :
1) 사례 :
a) T그룹화 된 테이블이 아닌 경우 [...]
b) T그룹화 된 테이블 인 경우
케이스:
i) T그룹이 0 인 경우 TEMP를 빈 테이블로 둡니다.
ii) T하나 이상의 그룹이있는 경우 <value expression>각 그룹 은 행 그룹을 T생성하는 각 그룹에 적용됩니다 . 여기서 그룹의 수는입니다 . TEMP의 번째 열은의 평가에 의해 도출 된 값을 포함 번째를 . [...]TEMPMMTii<value expression>
2) 사례 :
a)를 <set quantifier> DISTINCT지정하지 않으면의 결과는 <query specification>입니다 TEMP.
따라서 테이블에는 하나의 그룹이 있으므로 하나의 결과 행이 있어야합니다.
그러므로
SELECT 1 FROM r HAVING 1=1
1 행 결과 집합을 반환해야합니다.
QED
SELECT COUNT(*) FROM r;1 행 (with0)을SELECT COUNT(*) FROM r GROUP BY ();반환하지만 행은 반환하지 않기 때문에 모순됩니다 .