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

MySQL pilih berbeda tidak berfungsi

Karena ORDER BY id DESC klausa, kueri diperlakukan seolah-olah ditulis:

SELECT DISTINCT name, id
  FROM table
 ORDER BY id DESC;

kecuali id kolom tidak dikembalikan ke pengguna (Anda). Kumpulan hasil harus menyertakan id untuk dapat memesan dengan itu. Jelas, kumpulan hasil ini memiliki empat baris, jadi itulah yang dikembalikan. (Moral:jangan mengurutkan berdasarkan kolom tersembunyi — kecuali Anda tahu apa yang akan terjadi pada kueri Anda.)

Coba:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(dengan atau tanpa DESC sesuai keinginan). Itu akan mengembalikan hanya dua baris.

Jika Anda perlu mengetahui id untuk setiap nama, pertimbangkan:

SELECT name, MIN(id)
  FROM table
 GROUP BY name
 ORDER BY MIN(id) DESC;

Anda bisa menggunakan MAX untuk efek yang sama baiknya.

Semua ini berlaku untuk semua database SQL, termasuk MySQL. MySQL memiliki beberapa aturan yang memungkinkan Anda untuk menghilangkan klausa GROUP BY dengan hasil yang agak non-deterministik. Saya sarankan untuk tidak mengeksploitasi fitur ini.

Untuk waktu yang lama (mungkin bahkan sekarang) standar SQL tidak memungkinkan Anda untuk memesan berdasarkan kolom yang tidak ada dalam daftar pilih, justru untuk menghindari kebingungan seperti ini. Ketika kumpulan hasil tidak menyertakan data pengurutan, pengurutan kumpulan hasil disebut 'pengurutan esensial'; jika kolom pemesanan semua muncul di kumpulan hasil, itu adalah 'pengurutan tidak penting' karena Anda memiliki cukup data untuk memesan data sendiri.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah tabel Gabung (tabel asosiasi) memiliki kunci utama? hubungan banyak ke banyak

  2. Bagaimana cara mengembalikan file dump dari mysqldump?

  3. Cara Mendapatkan Sisa Menggunakan MOD() di PostgreSQL, MS SQL Server, dan MySQL

  4. MySQL Query untuk menerima kombinasi acak dari dua tabel

  5. Tampilkan pesan kesalahan SQL