Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Nilai Berbeza daripada Lajur Tertentu Sambil Menyimpan Semua Lajur?

Bagaimana untuk Memilih Nilai Berbeza daripada Lajur Tertentu Sambil Menyimpan Semua Lajur?

Patricia Arquette
Lepaskan: 2025-01-18 20:52:12
asal
502 orang telah melayarinya

How to Select Distinct Values from Specific Columns While Keeping All Columns?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan