Benim için bir numaralı fark: HAVINGSQL 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 WHEREdilden çı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 DUALkullanarak 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.ONWHERE
TL; DR HAVINGyarın kaybedebiliriz ve işler daha kötü, muhtemelen daha iyi olmazdı, ama aynı şey söylenemez WHERE.
Buradaki cevaplardan, birçok halk bir HAVINGcümlenin bir GROUP BYcümle olmadan kullanılabileceğini anlamıyor gibi görünüyor . Bu durumda, HAVINGyan 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, namesü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: HAVINGyan tümcesi true ise, değeri içeren tek bir satırla 1sonuç, aksi takdirde sonuç boş küme olur.
HAVING, oysa bir post-agregasyon filtreWHEREbir ön çekiş filtredir.