Pilih baris unik berdasarkan berbilang lajur dengan cekap
Apabila bekerja dengan jadual data, selalunya perlu mengambil hanya baris unik berdasarkan keadaan tertentu. Dalam contoh ini, matlamatnya ialah untuk memilih semua baris daripada jadual yang mempunyai gabungan unik dua lajur.
Pendekatan asal ialah menggunakan gabungan klausa DISTINCT
dan IN
untuk mengenal pasti baris unik:
<code class="language-sql">UPDATE sales SET status = 'ACTIVE' WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id) FROM sales HAVING count = 1)</code>
Walau bagaimanapun, kaedah yang lebih cekap dan boleh dipercayai ialah menggunakan klausa GROUP BY
:
<code class="language-sql">SELECT DISTINCT a,b,c FROM t</code>
Ini bersamaan dengan:
<code class="language-sql">SELECT a,b,c FROM t GROUP BY a,b,c</code>
GROUP BY
mengumpulkan baris mengikut lajur yang ditentukan (dalam kes ini, saleprice
dan saledate
) dan menghapuskan baris pendua. Pertanyaan berikut akan mencapai hasil yang diingini:
<code class="language-sql">UPDATE sales SET status='ACTIVE' WHERE id IN ( SELECT id FROM sales S INNER JOIN ( SELECT saleprice, saledate FROM sales GROUP BY saleprice, saledate HAVING COUNT(*) = 1 ) T ON S.saleprice=T.saleprice AND s.saledate=T.saledate )</code>
Pertanyaan ini mengenal pasti baris jualan unik berdasarkan saleprice
dan saledate
serta mengemas kini statusnya kepada "AKTIF". Subkueri menggunakan klausa GROUP BY
dan HAVING
untuk memilih gabungan unik saleprice
dan saledate
.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris Berbeza Berdasarkan Berbilang Lajur dalam SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!