Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Nilai Berbeza daripada Lajur Tertentu Sambil Menyimpan Semua Lajur?
Mendapatkan Nilai Lajur Unik Sambil Mengekalkan Semua Lajur
Cabarannya terletak pada memilih nilai unik daripada lajur tertentu (cth., field1
, field2
) sambil mengekalkan semua lajur dalam output. Hanya menggunakan SELECT DISTINCT field1, * FROM table
adalah tidak sah kerana kekaburan yang ditimbulkannya.
Penyelesaian Berkesan:
1. Pendekatan GROUP BY
:
Klausa GROUP BY
menawarkan penyelesaian:
<code class="language-sql">SELECT * FROM table GROUP BY field1;</code>
Ini mengumpulkan baris berdasarkan nilai field1
yang sama, menghasilkan hanya nilai field1
unik. Walau bagaimanapun, ambil perhatian bahawa kaedah ini mungkin membawa kepada hasil yang tidak dapat diramalkan untuk lajur lain melainkan disertakan secara eksplisit dalam pernyataan SELECT
dan klausa GROUP BY
.
2. Memanfaatkan DISTINCT ON
(Khusus Pangkalan Data):
Sesetengah sistem pangkalan data (bukan semua) menyokong DISTINCT ON
, membenarkan pemilihan unik pada lajur tertentu sambil mengekalkan semua lajur:
<code class="language-sql">SELECT DISTINCT ON (field1) * FROM table;</code>
Perlu diingat bahawa gelagat tepat DISTINCT ON
boleh berbeza-beza merentas platform pangkalan data yang berbeza.
3. Menggunakan Fungsi Tetingkap (PostgreSQL, Oracle, T-SQL, dll.):
Pangkalan data yang menyokong fungsi tetingkap (seperti PostgreSQL, Oracle dan T-SQL) menyediakan penyelesaian yang mantap:
<code class="language-sql">SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS row_number FROM table ) AS rows WHERE row_number = 1;</code>
Pendekatan ini memberikan nombor baris dalam setiap partition (ditakrifkan oleh field1
), disusun mengikut field2
. Hasil akhir hanya termasuk baris dengan row_number = 1
, dengan berkesan memilih nilai field1
unik sambil mengekalkan semua lajur.
4. Subqueries dan Self-Joins (MySQL, SQLite, dll.):
Untuk pangkalan data yang tidak mempunyai fungsi tetingkap (mis., MySQL, SQLite), gabungan subkueri dan sambung sendiri ialah alternatif yang berdaya maju:
<code class="language-sql">SELECT t.* FROM table t WHERE (field1, field2, ...) IN ( SELECT DISTINCT (field1, field2, ...) FROM table );</code>
Ini memilih baris yang gabungan field1
, field2
, dsb., adalah unik dalam jadual. Ingat untuk melaraskan senarai lajur dalam klausa IN
agar sepadan dengan keperluan khusus anda.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Nilai Berbeza daripada Lajur Tertentu Sambil Menyimpan Semua Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!