Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hilangkan baris duplikat dalam pernyataan SELECT PostgreSQL

PostgreSQL saat ini tidak mengizinkan GROUP BY yang ambigu pernyataan di mana hasilnya tergantung pada urutan tabel dipindai, rencana yang digunakan, dll. Begitulah standar mengatakan itu harus bekerja AFAIK, tetapi beberapa database (seperti versi MySQL sebelum 5.7) mengizinkan kueri yang lebih longgar yang hanya memilih nilai pertama ditemui untuk elemen yang muncul di SELECT daftar tetapi tidak dalam GROUP BY .

Di PostgreSQL, Anda harus menggunakan DISTINCT ON untuk jenis kueri ini.

Anda ingin menulis sesuatu seperti:

SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author 
left join anwendung on anwendung.name = autor.anwendung;

(Sintaks dikoreksi berdasarkan komentar lanjutan)

Ini sedikit mirip dengan ANY_VALUE(...) MySQL 5.7 pseudo-fungsi untuk group by , tetapi sebaliknya - dikatakan bahwa nilai dalam distinct on klausa harus unik, dan nilai apa pun dapat diterima untuk kolom tidak ditentukan.

Kecuali ada ORDER BY , tidak ada jaminan nilai mana yang dipilih. Anda biasanya harus memiliki ORDER BY untuk prediktabilitas.

Juga dicatat bahwa menggunakan agregat seperti min() atau max() akan bekerja. Meskipun ini benar - dan akan menghasilkan hasil yang andal dan dapat diprediksi, tidak seperti menggunakan DISTINCT ON atau GROUP BY yang ambigu - memiliki biaya kinerja karena kebutuhan untuk penyortiran atau agregasi ekstra, dan hanya berfungsi untuk tipe data ordinal.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan MySQL pada transaksi dengan koneksi yang hilang/terputus

  2. Cara membatasi nilai kolom di SQLite / MySQL

  3. Apakah akan menggunakan SET NAMA

  4. Cara Memformat Angka di MySQL

  5. Cara Memberikan Semua Keistimewaan pada Database di MySQL