Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Meniru Fungsi ANY_VALUE MySQL dalam Versi 5.6?

Bagaimana untuk Meniru Fungsi ANY_VALUE MySQL dalam Versi 5.6?

Mary-Kate Olsen
Lepaskan: 2024-11-29 22:12:11
asal
310 orang telah melayarinya

How to Mimic MySQL's ANY_VALUE Function in Version 5.6?

MySQL 5.6: Alternatif kepada Fungsi ANY_VALUE

Apabila bekerja dengan MySQL versi 5.7 dan 5.6, seseorang mungkin menghadapi masalah berkenaan dengan fungsi ANY_VALUE, yang hanya tersedia dalam versi 5.7. Ini boleh menyebabkan kekeliruan dan ralat semasa pelaksanaan pertanyaan. Timbul persoalan: bagaimanakah seseorang boleh memperoleh kefungsian serupa dalam MySQL 5.6?

MySQL 5.6 tidak memberikan persamaan langsung dengan ANY_VALUE. Walau bagaimanapun, terdapat pendekatan alternatif yang boleh mencapai hasil yang diingini.

Lumpuhkan ONLY_FULL_GROUP_BY Mode

Satu pilihan adalah untuk melumpuhkan ONLY_FULL_GROUP_BY SQL mod. Mod ini menguatkuasakan bahawa semua lajur bukan agregat yang dirujuk dalam pernyataan SELECT mesti juga muncul dalam klausa GROUP BY. Dengan melumpuhkan mod ini, MySQL akan membenarkan pertanyaan seperti ini dilaksanakan tanpa ralat:

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;
Salin selepas log masuk

Untuk melumpuhkan ONLY_FULL_GROUP_BY, gunakan sintaks berikut:

  SET @mode := @@SESSION.sql_mode;
  SET SESSION sql_mode = '';
  /* your query here */
  SET SESSION sql_mode = @mode;
Salin selepas log masuk

Walau bagaimanapun, ia adalah penting untuk ambil perhatian bahawa melumpuhkan ONLY_FULL_GROUP_BY boleh membawa kepada keputusan yang salah atau tingkah laku yang tidak dijangka dalam sesetengah kes.

Memilih Nilai "Pertama"

Pendekatan lain ialah mengubah suai pertanyaan untuk memilih nilai tertentu daripada jadual imej, seperti yang pertama. Ini boleh dicapai menggunakan fungsi MIN() dan subkueri:

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
Salin selepas log masuk

Pertanyaan ini akan mengembalikan satu baris bagi setiap negara, dengan imej menjadi yang pertama dalam jadual, disusun mengikut idnya. Pendekatan ini memberikan hasil yang boleh diramal dan konsisten.

Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi ANY_VALUE MySQL dalam Versi 5.6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan