Apakah mungkin untuk memesan ketika data berasal dari banyak pilih dan menyatukannya bersama? Seperti
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Bagaimana saya bisa memesan permintaan ini dengan nama.
Beberapa mengatakan Anda dapat meminta tampilan seperti ini.
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
Tetapi dalam hal ini saya mengabaikan solusi itu.
sql
sql-order-by
union
Guilgamo
sumber
sumber
Jawaban:
Cukup tulis
urutan oleh diterapkan ke resultset lengkap
sumber
sumber
xxx UNION yyy ORDER BY zzz
persamaan(xxx UNION yyy) ORDER BY zzz
Agar penyortiran hanya berlaku untuk pernyataan pertama di UNION, Anda dapat memasukkannya ke dalam subselect dengan UNION ALL (keduanya tampaknya diperlukan di Oracle):
Atau (menanggapi komentar Nicholas Carey) Anda dapat menjamin SELECT atas dipesan dan hasilnya muncul di atas SELECT bawah seperti ini:
sumber
select
pernyataan yang merujuk subselect itu. Per Standar SQL, urutan hasil tidak ditentukan kecualiorder by
klausa eksplisit . Yang pertamaselect
dalam contoh Anda mungkin mengembalikan hasilnya dalam urutan yang dikembalikan oleh subselect, tetapi tidak dijamin. Lebih lanjut, itu * tidak * menjamin pemesanan set hasil keseluruhanunion
(aturan yang sama dalam Standar). Jika Anda bergantung pada urutannya, Anda akan - pada akhirnya - digigit.SELECT
.Kedua jawaban lainnya benar, tetapi saya pikir perlu dicatat bahwa tempat saya macet tidak menyadari bahwa Anda akan perlu memesan oleh alias dan memastikan bahwa alias sama untuk kedua pilihan ... jadi
perhatikan bahwa saya menggunakan tanda kutip tunggal di pilih pertama tetapi backticks untuk yang lain.
Itu akan membuat Anda menyortir yang Anda butuhkan.
sumber
SELECT a, b, c FROM (<insert union query here>) AS x;
jika Anda benar-benar ingin menghindari mengembalikan kolom tambahan.Order By
diterapkan setelahunion
, jadi tambahkan sajaorder by
klausa di akhir pernyataan:sumber
Jika saya ingin jenis diterapkan hanya pada satu UNION jika menggunakan Union all:
sumber
Seperti jawaban lain yang dinyatakan, 'Pesanan oleh' setelah LAST Union harus berlaku untuk kedua set data yang bergabung dengan serikat pekerja.
Saya memiliki dua set data tetapi menggunakan tabel yang berbeda tetapi kolom yang sama. 'Pesan oleh' setelah LAST Union masih tidak berfungsi. Menggunakan ALIAS untuk kolom yang digunakan dalam 'urutan oleh' melakukan trik.
Jadi solusinya gunakan Alias 'User_Name':
sumber
Dapat menggunakan ini:
sumber