Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL select different nie działa

Ze względu na ORDER BY id DESC klauzula, zapytanie jest traktowane tak, jakby zostało napisane:

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

z wyjątkiem tego, że id kolumny nie są zwracane użytkownikowi (Tobie). Zestaw wyników musi zawierać id aby móc przez to zamówić. Oczywiście ten zestaw wyników ma cztery wiersze, więc to jest zwracane. (Moralność:nie porządkuj według ukrytych kolumn — chyba że wiesz, co to zrobi z Twoim zapytaniem.)

Wypróbuj:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(z DESC lub bez DESC według kaprysu). To zwróci tylko dwa wiersze.

Jeśli potrzebujesz znać id dla każdego imienia rozważ:

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

Możesz użyć MAX do równie dobrego efektu.

Wszystko to dotyczy wszystkich baz danych SQL, w tym MySQL. MySQL ma kilka reguł, które pozwalają na pominięcie klauzul GROUP BY z nieco niedeterministycznymi wynikami. Odradzam wykorzystywanie tej funkcji.

Przez długi czas (może nawet teraz) standard SQL nie pozwalał na porządkowanie według kolumn, których nie było na liście wyboru, właśnie po to, by uniknąć takich pomyłek. Gdy zestaw wyników nie zawiera danych porządkowych, porządkowanie zestawu wyników nazywa się „podstawowym porządkowaniem”; jeśli wszystkie kolumny porządkowania pojawiają się w zestawie wyników, jest to „niezbędne porządkowanie”, ponieważ masz wystarczającą ilość danych, aby samodzielnie uporządkować dane.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wystąpił problem z połączeniem z bazą danych przy użyciu d2rq

  2. Moja aplikacja uzyskuje dostęp do zdalnej bazy danych. Jak sprawnie przeprowadzić testy jednostkowe?

  3. zapytanie mysql, wybierając określoną tablicę wyników

  4. Indeks przestrzenny nie jest używany

  5. Wysyłanie haseł przez Internet