Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Dapatkan Semua Lajur dalam Pertanyaan SQL Menggunakan DISTINCT?

Bagaimanakah Saya Boleh Dapatkan Semua Lajur dalam Pertanyaan SQL Menggunakan DISTINCT?

Patricia Arquette
Lepaskan: 2025-01-18 20:44:12
asal
508 orang telah melayarinya

How Can I Retrieve All Columns in a SQL Query Using DISTINCT?

Mengambil semula Semua Lajur Menggunakan DISTINCT dalam Pertanyaan SQL

Kata kunci DISTINCT dalam SQL mengalih keluar baris pendua berdasarkan lajur yang ditentukan. Walau bagaimanapun, mendapatkan semua lajur sambil hanya menunjukkan nilai yang berbeza dalam subset lajur memerlukan pertimbangan yang teliti. Hanya menggunakan SELECT DISTINCT * tidak disokong dengan pasti merentas semua sistem pangkalan data.

Penyelesaian untuk Mendapatkan Lajur Lengkap dengan DISTINCT

Beberapa kaedah wujud untuk mencapai ini, bergantung pada sistem pangkalan data khusus anda:

  • Fungsi ROW_NUMBER() MySQL: MySQL menawarkan penyelesaian menggunakan fungsi tetingkap ROW_NUMBER() dalam subkueri:
<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

Ini memberikan nombor baris unik dalam setiap partition (ditakrifkan oleh field1), dipesan oleh field2. Pertanyaan luar kemudian memilih hanya baris pertama daripada setiap partition. Gantikan field1 dan field2 dengan lajur anda yang sesuai.

  • KUMPULAN MENGIKUT Klausa (Kebolehgunaan Terhad): Klausa GROUP BY boleh berfungsi, tetapi hanya jika anda boleh menjamin bahawa semua lajur lain mempunyai nilai yang sama untuk setiap gabungan berbeza lajur terkumpul. Ini selalunya tidak berlaku dan boleh membawa kepada keputusan yang tidak dapat diramalkan.
<code class="language-sql">SELECT *
FROM table
GROUP BY field1;</code>
Salin selepas log masuk
  • DISTINCT ON (PostgreSQL, Oracle): PostgreSQL dan Oracle menyediakan klausa DISTINCT ON, penyelesaian yang lebih langsung:
<code class="language-sql">SELECT DISTINCT ON (field1) *
FROM table;</code>
Salin selepas log masuk

Ini hanya memilih baris pertama untuk setiap nilai berbeza field1.

  • Sertai Subkueri (MySQL, SQLite, dll.): Untuk pangkalan data yang tidak mempunyai fungsi tetingkap, sambung sendiri dengan subkueri boleh digunakan (ini kurang cekap):
<code class="language-sql">SELECT *
FROM table AS t1
INNER JOIN table AS t2
ON t1.field1 = t2.field1
INNER JOIN (SELECT field1, MIN(field2) AS min_field2 FROM table GROUP BY field1) AS distinct_fields
ON t1.field1 = distinct_fields.field1 AND t1.field2 = distinct_fields.min_field2;</code>
Salin selepas log masuk

Ini mencari nilai minimum field2 untuk setiap field1 yang berbeza dan menggabungkannya kembali ke jadual asal. Anda mungkin perlu melaraskan fungsi MIN() bergantung pada tingkah laku yang anda inginkan.

Ingat untuk menggantikan "table", "field1" dan "field2" dengan nama jadual dan lajur sebenar anda. Pendekatan terbaik bergantung pada sistem pangkalan data khusus anda dan gelagat yang diingini apabila berbilang baris mempunyai nilai berbeza yang sama dalam lajur yang ditentukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Semua Lajur dalam Pertanyaan SQL Menggunakan DISTINCT?. 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