ความแตกต่างอันดับหนึ่งสำหรับฉัน: ถ้าHAVINGถูกลบออกจากภาษา SQL ชีวิตจะมีมากขึ้นหรือน้อยลงเหมือนเมื่อก่อน แน่นอนว่าคำสั่งของผู้ถือหุ้นส่วนน้อยจะต้องถูกเขียนใหม่โดยใช้ตารางที่ได้รับ CTE และอื่น ๆ แต่พวกเขาจะเข้าใจและบำรุงรักษาได้ง่ายขึ้น อาจต้องใช้รหัสเครื่องมือเพิ่มประสิทธิภาพของผู้ขายเพื่อเขียนใหม่สำหรับบัญชีนี้เป็นโอกาสในการปรับปรุงภายในอุตสาหกรรมอีกครั้ง
ตอนนี้ให้ลองพิจารณานำออกWHEREจากภาษาสักครู่ เวลานี้แบบสอบถามส่วนใหญ่ที่มีอยู่จะต้องถูกเขียนใหม่โดยไม่มีโครงสร้างทางเลือกที่ชัดเจน ผู้เขียนจะต้องได้รับความคิดสร้างสรรค์เช่นการเข้าร่วมภายในกับตารางที่ทราบว่ามีหนึ่งแถว (เช่นDUALใน Oracle) โดยใช้ส่วนONคำสั่งเพื่อจำลองWHEREประโยคก่อนหน้า สิ่งปลูกสร้างดังกล่าวจะได้รับการวางแผน; จะเห็นได้ชัดว่ามีบางสิ่งที่ขาดหายไปจากภาษาและสถานการณ์ก็จะแย่ลงตามไปด้วย
TL; DR เราอาจแพ้HAVINGในวันพรุ่งนี้และทุกอย่างจะไม่แย่ไปกว่านั้นอาจจะดีกว่า แต่ก็ไม่สามารถพูดWHEREได้เหมือนกัน
จากคำตอบที่นี่ดูเหมือนว่าชาวบ้านจำนวนมากไม่ตระหนักว่าHAVINGอาจมีการใช้GROUP BYประโยคโดยไม่มีประโยค ในกรณีนี้HAVINGคำสั่งจะถูกนำไปใช้กับการแสดงออกของตารางทั้งหมดและต้องการให้ค่าคงที่เท่านั้นปรากฏในส่วนSELECTคำสั่ง โดยทั่วไปHAVINGข้อจะเกี่ยวข้องกับมวลรวม
สิ่งนี้มีประโยชน์มากกว่าที่คิด ตัวอย่างเช่นลองพิจารณาแบบสอบถามนี้เพื่อทดสอบว่าnameคอลัมน์นั้นมีค่าเฉพาะสำหรับทุกค่าในT:
SELECT 1 AS result
FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );
มีเพียงสองผลลัพธ์ที่เป็นไปได้: หากส่วนHAVINGคำสั่งเป็นจริงผลลัพธ์จะเป็นแถวเดียวที่มีค่า1มิฉะนั้นผลลัพธ์จะเป็นชุดว่าง
HAVINGตัวกรองหลังการรวมขณะที่WHEREเป็นตัวกรองการรวมล่วงหน้า