Benim için bir numaralı fark: HAVING
SQL dilinden kaldırılmışsa, hayat daha önce olduğu gibi az çok devam ederdi. Kuşkusuz, bir azınlık sorgularının türetilmiş bir tablo, CTE, vb. Kullanılarak yeniden yazılması gerekir, ancak sonuç olarak anlaşılması ve sürdürülmesi muhtemelen daha kolay olacaktır. Belki de satıcıların optimizasyon kodunun bu durumu göz önünde bulundurarak yeniden yazılması gerekebilir, bu da yine sektördeki iyileştirme fırsatıdır.
Şimdi bir an WHERE
dilden çıkarmayı düşünün . Bu kez var olan sorguların çoğunun bariz bir alternatif yapı olmadan yeniden yazılması gerekecektir. Kodlayıcılar , bir önceki maddeyi simüle etmek için yan tümcesi DUAL
kullanarak tam olarak bir satır (ör . Oracle'da) içerdiği bilinen bir tabloya iç birleşim yaratıcı hale getirmelidir . Bu tür yapılar inşa edilecektir; dilde bir şey eksik olduğu ve durumun daha kötü olacağı açıktır.ON
WHERE
TL; DR HAVING
yarın kaybedebiliriz ve işler daha kötü, muhtemelen daha iyi olmazdı, ama aynı şey söylenemez WHERE
.
Buradaki cevaplardan, birçok halk bir HAVING
cümlenin bir GROUP BY
cümle olmadan kullanılabileceğini anlamıyor gibi görünüyor . Bu durumda, HAVING
yan tümce tümce tümce tümce tümce tümce uygulanır ve yan tümce yalnızca sabitlerin görünmesini gerektirir SELECT
. GenellikleHAVING
madde toplamları içerecektir.
Bu göründüğünden daha kullanışlıdır. Örneğin, name
sütunun aşağıdaki değerlerin tümü için benzersiz olup olmadığını test etmek için bu sorguyu göz önünde bulundurun T
:
SELECT 1 AS result
FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );
Yalnızca iki olası sonuç vardır: HAVING
yan tümcesi true ise, değeri içeren tek bir satırla 1
sonuç, aksi takdirde sonuç boş küme olur.
HAVING
, oysa bir post-agregasyon filtreWHERE
bir ön çekiş filtredir.