Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Mengelakkan \'Ungkapan #1 senarai SELECT tiada dalam GROUP BY\' Ralat dalam MySQL?

Bagaimanakah Saya Boleh Mengelakkan \'Ungkapan #1 senarai SELECT tiada dalam GROUP BY\' Ralat dalam MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-11-27 18:51:11268semak imbas

How Can I Avoid

Mengelakkan Ralat GROUP BY dengan MySQL ANY_VALUE

Apabila bekerja dengan pangkalan data MySQL, adalah perkara biasa untuk menghadapi ralat yang berkaitan dengan operasi pengumpulan, terutamanya dalam versi sebelum 5.7. Satu isu sedemikian ialah ralat "Ungkapan #1 senarai SELECT tiada dalam GROUP BY." Ralat ini berlaku apabila cuba mendapatkan semula lajur tidak teragregat dalam pertanyaan KUMPULAN OLEH.

Dalam MySQL 5.7, fungsi ANY_VALUE menyediakan penyelesaian yang mudah untuk isu ini dengan membenarkan pengambilan nilai arbitrari tunggal daripada bukan- lajur agregat dalam kumpulan. Walau bagaimanapun, fungsi ini tidak tersedia dalam versi MySQL yang lebih awal, seperti 5.6.

Satu penyelesaian adalah untuk melumpuhkan mod SQL ONLY_FULL_GROUP_BY SQL buat sementara waktu, yang menguatkuasakan keperluan yang lebih ketat untuk operasi GROUP BY. Ini boleh dilakukan menggunakan pertanyaan berikut:

SET SESSION sql_mode = '';

Selepas melumpuhkan mod SQL, pertanyaan menggunakan fungsi ANY_VALUE akan dilaksanakan tanpa ralat dalam MySQL 5.6. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penyelesaian ini mungkin membawa kepada hasil yang tidak dapat diramalkan, kerana ia membenarkan lajur tidak teragregat dikembalikan dalam hasil pertanyaan.

Penyelesaian yang lebih dipercayai ialah mengubah suai pertanyaan SQL itu sendiri kepada mengagregat secara eksplisit lajur yang dikehendaki atau untuk memilih baris tertentu daripada jadual. Sebagai contoh, jika jadual imej dalam contoh pertanyaan mempunyai lajur id kenaikan automatik, pertanyaan berikut akan mengembalikan satu baris bagi setiap negara dengan imej boleh diramal ditunjukkan:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan \'Ungkapan #1 senarai SELECT tiada dalam GROUP BY\' Ralat dalam MySQL?. 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