Rumah  >  Artikel  >  pangkalan data  >  Adakah MySQL 5.6 Menawarkan Setara dengan Fungsi ANY_VALUE?

Adakah MySQL 5.6 Menawarkan Setara dengan Fungsi ANY_VALUE?

DDD
DDDasal
2024-11-27 04:14:11902semak imbas

Does MySQL 5.6 Offer an Equivalent to the ANY_VALUE Function?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn