Rumah >pangkalan data >tutorial mysql >Bolehkah Anda Menggunakan HAVING Tanpa GROUP BY dalam SQL?
Dalam SQL standard, adakah mungkin untuk menggunakan klausa HAVING tanpa klausa GROUP BY?
Soalan 1: Pematuhan SQL Standard
contoh pertanyaan yang disediakan:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
bercanggah dengan standard SQL. Mengikut piawaian, semua rujukan lajur dalam klausa HAVING mesti merujuk lajur secara fungsional bergantung pada set lajur yang dinyatakan dalam klausa GROUP BY. Walau bagaimanapun, pertanyaan yang dipersoalkan tidak mempunyai klausa GROUP BY, menjadikannya tidak standard.
Soalan 2: Keserasian MySQL
Pertanyaan berfungsi dalam MySQL hanya dalam keadaan tertentu , di mana baris pertama hasil mengandungi nilai maksimum untuk NumberOfPages. Tingkah laku ini mungkin disebabkan oleh pengendalian MySQL terhadap klausa HAVING jika tiada klausa GROUP BY.
Soalan 3: Justifikasi SQL Standard
Standard melarang klausa HAVING tanpa GROUP Klausa BY kerana ia mewujudkan kesamaran dalam menentukan baris mana yang memenuhi syarat HAVING. Untuk ungkapan jadual yang dipertimbangkan secara keseluruhan, tiada asas logik untuk memilih baris tertentu untuk perbandingan dengan fungsi agregat.
Contoh Pertanyaan SQL Standard yang Sah:
Pertanyaan ini menunjukkan penggunaan klausa HAVING yang sah tanpa GROUP BY klausa:
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
Pertanyaan sentiasa mengembalikan sama ada satu baris dengan nilai 'T' (menunjukkan buku dengan bilangan halaman yang berbeza) atau set kosong (tiada baris).
Kesimpulan:
Walaupun pertanyaan sampel berfungsi dalam MySQL, ia tidak mematuhi SQL standard. Standard SQL menghalang penggunaan klausa HAVING tanpa klausa GROUP BY untuk mengelakkan kekaburan dan memastikan konsistensi logik.
Atas ialah kandungan terperinci Bolehkah Anda Menggunakan HAVING Tanpa GROUP BY dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!