Standartlara göre:
SELECT 1 FROM r HAVING 1=1
anlamına geliyor
SELECT 1 FROM r GROUP BY () HAVING 1=1
Alıntı ISO / IEC 9075-2: 2011 7.10 Sözdizimi Kural 1 (HAVING yan tümcesinin tanımının bir parçası):
Izin HColmak <having clause>. Izin TEolmak <table expression>hemen içerdiğini HC. Eğer TEhemen bir içermiyor
<group by clause>, ardından “ GROUP BY ()” örtük olduğunu. Izin vermek hemen içerdiği Ttarafından tanımlanan tablonun tanımlayıcı olmak ve sonuç olsun .<group by clause> GBCTERGBC
Tamam o kadar açık ki.
İddia: 1=1gerçek arama koşulu. Bunun için alıntı yapmayacağım.
şimdi
SELECT 1 FROM r GROUP BY () HAVING 1=1
eşittir
SELECT 1 FROM r GROUP BY ()
Atıf ISO / IEC 9075-2: 2011 7.10 Genel Kural 1:
<search condition>Her grup için değerlendirilir R. Sonuç <having clause>, sonucunun <search condition>Doğru olduğu R gruplarının gruplandırılmış bir tablosudur
.
Mantık: Arama koşulu daima doğru Rolduğu için sonuç, grubun ifadeye göre sonucudur.
Aşağıdaki genel kurallar 7.9'dan (GROUP BY CLAUSE'ın tanımı) bir alıntıdır.
1) Hayır <where clause>belirtilirse, bir öncekinin Tsonucu olsun <from clause>; aksi takdirde, bir öncekinin Tsonucu olsun <where clause>.
2) Durum:
a) Hiçbir gruplama sütunu yoksa, sonucunun sonucu tek grup olarak <group by clause>oluşan gruplandırılmış tablodur T.
Böylece şu sonuca varabiliriz:
FROM r GROUP BY ()
sıfır satır içeren bir gruptan oluşan gruplandırılmış bir tablo ile sonuçlanır (R boş olduğu için).
Sorgu Spesifikasyonu (diğer adıyla SELECT ifadesi) tanımlayan 7.12 Genel Kurallarından bir alıntı:
1) Durum:
a) TGruplandırılmış bir tablo değilse, [...]
b) TGruplandırılmış bir tablo ise,
Durum:
i) T0 (sıfır) grup varsa TEMP'nin boş bir tablo olmasına izin verin.
Eğer ii) Tbir veya daha fazla grup yer alır, daha sonra her bir <value expression>her bir gruba uygulanan Tbir tablo elde TEMPait Msıraları, burada Mgrupların sayısıdır T. iTEMP inci kolon değerlendirilmesi ile elde edilen değerleri içerir ith <value expression>. [...]
2) Durum:
Bir) <set quantifier> DISTINCTbelirtilmemişse, o sonucu <query specification>olduğunu TEMP.
Bu nedenle, tablonun bir grubu olduğundan, bir sonuç satırına sahip olması gerekir.
Böylece
SELECT 1 FROM r HAVING 1=1
1 satır sonuç kümesi döndürmelidir.
QED
SELECT COUNT(*) FROM r;1 satır döndürüyor (ile0),SELECT COUNT(*) FROM r GROUP BY ();hiçbir satır döndürmüyor.