Rumah > Artikel > pangkalan data > Adakah MySQL 5.6 Menawarkan Setara dengan Fungsi ANY_VALUE?
Adakah terdapat ANY_VALUE Keupayaan dalam MySQL 5.6?
Anda telah menghadapi isu semasa bekerja dengan MySQL 5.6 dalam pengeluaran dan 5.7 dalam pembangunan. Khususnya, anda menggunakan klausa KUMPULAN OLEH, yang mengembalikan ralat dalam 5.6. Dalam 5.7, anda menyelesaikan isu dengan menggunakan fungsi ANY_VALUE, tetapi ia tidak disokong dalam MySQL 5.6.
Pertanyaan yang anda gunakan ialah:
SELECT c.id, c.name, i.* FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
Dalam MySQL 5.6, anda mendapat ralat kerana lajur tidak teragregat disebut dalam KUMPULAN OLEH klausa. Satu penyelesaian ialah menggunakan fungsi ANY_VALUE, yang memilih baris rawak daripada jadual.
SELECT c.id, c.name, ANY_VALUE(i.url) url, ANY_VALUE(i.lat) lat, ANY_VALUE(i.lng) lng FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
Walau bagaimanapun, menggunakan ANY_VALUE tidak sesuai kerana ia mengembalikan nilai sewenang-wenangnya. Penyelesaian yang lebih baik ialah mendapatkan semula nilai tertentu, seperti nilai pertama:
SELECT c.id, c.name, i.* FROM countries c LEFT JOIN ( SELECT MIN(id) id, country_id FROM images GROUP BY country_id ) first ON c.id = first.country_id LEFT JOIN images i ON first.id = i.id
Ini akan mengembalikan imej pertama untuk setiap negara dan bukannya secara rawak. Sebagai alternatif, anda boleh melumpuhkan mod ONLY_FULL_GROUP_BY dalam MySQL 5.6 untuk membenarkan pertanyaan asal dijalankan, tetapi ini tidak disyorkan kerana ia boleh membawa kepada keputusan yang salah.
Atas ialah kandungan terperinci Adakah MySQL 5.6 Menawarkan Setara dengan Fungsi ANY_VALUE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!