Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL select distinct не работи

Поради ORDER BY id DESC клауза, заявката се третира по-скоро така, сякаш е написана:

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

с изключение на id колони не се връщат на потребителя (вие). Резултатният набор трябва да включва id за да можете да поръчате по него. Очевидно този набор от резултати има четири реда, така че това се връща. (Морал:не подреждайте по скрити колони — освен ако не знаете какво ще направи това с вашата заявка.)

Опитайте:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(със или без DESC според желанието). Това ще върне само двата реда.

Ако трябва да знаете id за всяко име помислете за:

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

Можете да използвате MAX за също толкова добър ефект.

Всичко това се отнася за всички SQL бази данни, включително MySQL. MySQL има някои правила, които ви позволяват да пропускате клаузи GROUP BY с донякъде недетерминистични резултати. Препоръчвам ви да не използвате функцията.

Дълго време (може би дори сега) SQL стандартът не позволяваше да подреждате по колони, които не бяха в списъка за избор, именно за да избегнете объркване като това. Когато наборът от резултати не включва данните за подреждане, подреждането на набора от резултати се нарича „съществено подреждане“; ако всички колони за подреждане се появяват в набора с резултати, това е „несъществено подреждане“, защото имате достатъчно данни, за да подредите данните сами.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкнете В MySQL ОТ друга таблица

  2. актуализиране, ако съществуват две полета, вмъкнете, ако не (MySQL)

  3. Разработка, насочена към тестване, за проверка на включените методи в заявките към базата данни

  4. MySQL Pivot таблица дати в името на колоната

  5. MySql Вмъкване Изберете uuid()