Pemeliharaan Pesanan dalam SQL UNION ALL Queries
Dalam SQL, UNION ALL digunakan untuk menggabungkan hasil berbilang pernyataan SELECT menjadi satu hasil ditetapkan. Tidak seperti pengendali UNION, UNION ALL tidak menghapuskan baris pendua. Walau bagaimanapun, adakah ia menjamin susunan set data yang terhasil?
Jawapan ringkasnya ialah tidak. UNION ALL tidak secara inheren mengekalkan susunan keputusan. Susunan penyataan SELECT dilaksanakan dan baris dikembalikan adalah khusus pelaksanaan dan boleh berbeza antara pangkalan data malah dalam versi berbeza pangkalan data yang sama.
Untuk menggambarkan ini, pertimbangkan pertanyaan berikut:
SELECT 'O' UNION ALL SELECT 'R' UNION ALL SELECT 'D' UNION ALL SELECT 'E' UNION ALL SELECT 'R'
Walaupun dalam beberapa kes, set keputusan mungkin muncul dalam urutan "O-R-D-E-R", tidak ada menjamin bahawa ini akan sentiasa berlaku.
Untuk memastikan susunan tertentu dalam keputusan, anda mesti menggunakan klausa ORDER BY secara eksplisit selepas operator UNION ALL. Sebagai contoh, pertanyaan berikut akan menyusun keputusan dalam susunan abjad menaik:
SELECT 'O' UNION ALL SELECT 'R' UNION ALL SELECT 'D' UNION ALL SELECT 'E' UNION ALL SELECT 'R' ORDER BY 1
Dengan menambahkan lajur SortOrder pada setiap pernyataan SELECT, anda juga boleh mengawal susunan keputusan berdasarkan kriteria tersuai:
SELECT 'O', 1 SortOrder UNION ALL SELECT 'R', 2 UNION ALL SELECT 'D', 3 UNION ALL SELECT 'E', 4 UNION ALL SELECT 'R', 5 ORDER BY SortOrder
Oleh itu, adalah penting untuk menggunakan ORDER BY apabila pesanan khusus keputusan diperlukan. Jika tidak, susunan set hasil mungkin berbeza-beza tanpa diduga.
Atas ialah kandungan terperinci Adakah SQL UNION SEMUA Mengekalkan Susunan Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!