MySQL and Beyond: Mendapatkan Semula Semua Lajur dengan Nilai Berbeza
Pernyataan SELECT DISTINCT
standard selalunya gagal apabila anda memerlukan semua lajur dikembalikan bersama nilai yang berbeza dalam satu lajur. Artikel ini meneroka kaedah alternatif untuk mencapai ini dengan cekap merentas pelbagai sistem pangkalan data.
Kaedah 1: Memanfaatkan GROUP BY
Klausa GROUP BY
menawarkan penyelesaian mudah untuk MySQL dan banyak pangkalan data lain. Ia mengumpulkan baris berdasarkan lajur yang ditentukan dan mengembalikan semua lajur untuk setiap kumpulan yang berbeza:
<code class="language-sql">SELECT * FROM your_table GROUP BY field1;</code>
Kaedah 2: Menggunakan DISTINCT ON
(PostgreSQL)
PostgreSQL menyediakan klausa DISTINCT ON
, menawarkan cara yang lebih ringkas untuk memilih nilai yang berbeza daripada lajur yang ditentukan sambil mengekalkan semua lajur untuk baris padanan pertama:
<code class="language-sql">SELECT DISTINCT ON (field1) * FROM your_table;</code>
Kaedah 3: Subkueri dan ROW_NUMBER()
(MySQL, SQLite)
Untuk pangkalan data yang tidak mempunyai sokongan langsung untuk DISTINCT ON
, gabungan subkueri dan ROW_NUMBER()
menyediakan penyelesaian yang fleksibel. Pendekatan ini memberikan kedudukan unik dalam setiap kumpulan yang berbeza dan penapis untuk mendapatkan hanya baris pertama setiap kumpulan:
<code class="language-sql">SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS rn -- field2 is an arbitrary column for ordering within each group FROM your_table ) AS ranked_rows WHERE rn = 1;</code>
Kaedah 4: Fungsi Tetingkap (PostgreSQL, Oracle, SQL Server)
Pangkalan data seperti PostgreSQL, Oracle dan SQL Server menawarkan fungsi tetingkap, memberikan alternatif yang lebih elegan dan selalunya lebih cekap kepada subkueri:
<code class="language-sql">SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS rn FROM your_table ) AS rows WHERE rn = 1;</code>
Pertimbangan Penting:
Ingat bahawa kaedah ini boleh memberi kesan kepada prestasi, terutamanya dengan set data yang besar. GROUP BY
boleh menjadi cekap tetapi mungkin memerlukan pertimbangan yang teliti terhadap pemilihan lajur. Pendekatan ROW_NUMBER()
menambah overhed pengiraan. Pilih kaedah yang paling sesuai dengan sistem pangkalan data khusus anda dan volum data untuk mengoptimumkan prestasi. Pilihan bergantung pada faktor seperti sistem pangkalan data, volum data dan keperluan prestasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Semua Lajur dengan Nilai Berbeza dalam MySQL dan Pangkalan Data Lain dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!