MENDAPAT Tanpa KUMPULAN OLEH: Pematuhan SQL Standard
Struktur pertanyaan yang dibentangkan dalam soalan:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
menimbulkan kebimbangan mengenai kesahihannya mengikut standard SQL. Pertanyaan menggunakan klausa HAVING tanpa klausa GROUP BY yang sepadan.
SQL Standard mentakrifkan klausa HAVING adalah sah jika syarat cariannya memenuhi kriteria tertentu. Kriteria ini termasuk bergantung secara fungsi pada lajur yang dirujuk dalam klausa GROUP BY atau menjadi rujukan luar.
Dalam pertanyaan yang diberikan, tiada klausa GROUP BY. Oleh itu, keadaan carian NumberOfPages = MAX(NumberOfPages) tidak memenuhi kriteria yang ditetapkan, kerana tiada pergantungan fungsi yang jelas bagi NumberOfPages pada mana-mana kumpulan tertentu.
Untuk mematuhi standard, pertanyaan perlu diubah suai untuk memasukkan klausa GROUP BY, seperti:
SELECT * FROM Book GROUP BY BookId HAVING NumberOfPages = MAX(NumberOfPages)
Dalam pertanyaan yang disemak ini, KUMPULAN MENGIKUT klausa membahagikan data mengikut BookId, mewujudkan kumpulan yang berbeza untuk setiap buku. Klausa HAVING kini menjadi sah, kerana ia beroperasi pada kumpulan ini, menyemak sama ada mana-mana kumpulan mengandungi baris dengan NumberOfPages maksimum.
Adalah penting untuk ambil perhatian bahawa sesetengah sistem pangkalan data, seperti MySQL, mungkin membenarkan pertanyaan sedemikian tanpa klausa GROUP BY, tetapi gelagat ini dianggap sambungan bukan standard.
Atas ialah kandungan terperinci Adakah Menggunakan HAVING Without GROUP BY Standard SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!