Menghadapi "subkueri mengembalikan lebih daripada 1 baris " ralat apabila cuba menetapkan kriteria berdasarkan keputusan subkueri boleh mengecewakan. Ralat ini berlaku apabila subkueri anda mengembalikan berbilang baris, tetapi pertanyaan utama anda hanya mengharapkan satu.
Untuk menyelesaikan isu ini, adalah penting untuk memahami perbezaan antara pengendali kesamarataan (=) dan pengendali IN. Operator kesamarataan hanya boleh membandingkan dua nilai, dan ia menjangkakan subquery akan mengembalikan satu nilai. Sebaliknya, operator IN membenarkan anda membandingkan nilai kepada berbilang nilai atau set nilai yang dikembalikan oleh subkueri.
Apabila subkueri anda mengembalikan berbilang baris, anda harus menggunakan operator IN untuk membandingkan nilai pertanyaan utama anda dengan berbilang nilai tersebut. Sintaks adalah seperti berikut:
SELECT * FROM table WHERE id IN (subquery)
Dalam contoh ini, subkueri akan mengembalikan berbilang baris dan pertanyaan utama akan menyemak sama ada lajur id sepadan dengan mana-mana nilai baris tersebut.
Pertimbangkan perkara berikut senario:
Untuk menyelesaikan ralat ini, ubah suai Pertanyaan 2 untuk menggunakan operator IN:
SELECT * FROM table2 WHERE id IN (SELECT id FROM table1)
Sekarang, Pertanyaan 2 akan mendapatkan semula rekod dengan betul dari jadual2 di mana lajur id sepadan mana-mana nilai yang dikembalikan oleh subquery.
Memahami perbezaan antara operator kesamarataan dan operator IN adalah penting apabila bekerja dengan subquery. Dengan menggunakan operator IN, anda boleh mengatasi ralat "subquery returns more than 1 row" dan menetapkan kriteria dengan berkesan berdasarkan berbilang nilai yang diperoleh daripada subquery.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membetulkan Ralat 'Subquery Mengembalikan Lebih Daripada 1 Baris' dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!