sql >> Databáze >  >> RDS >> Mysql

MySQL select different nefunguje

Kvůli ORDER BY id DESC klauzule, s dotazem se zachází spíše tak, jako by byl napsán:

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

kromě id sloupce nejsou vráceny uživateli (vám). Sada výsledků musí obsahovat id abych si podle toho mohl objednat. Je zřejmé, že tato sada výsledků má čtyři řádky, takže je to vráceno. (Morální:neseřazujte podle skrytých sloupců – pokud nevíte, co to udělá s vaším dotazem.)

Zkuste:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(s nebo bez DESC podle rozmaru). Tím se vrátí pouze dva řádky.

Pokud potřebujete znát id pro každé jméno zvažte:

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

Ke stejně dobrému efektu můžete použít MAX.

To vše platí pro všechny SQL databáze včetně MySQL. MySQL má některá pravidla, která vám umožňují vynechat klauzule GROUP BY s poněkud nedeterministickými výsledky. Nedoporučuji tuto funkci zneužívat.

Standard SQL dlouho (možná i nyní) neumožňoval řazení podle sloupců, které nebyly ve výběrovém seznamu, právě proto, aby nedocházelo k takovým zmatkům, jako je tento. Když sada výsledků nezahrnuje data řazení, seřazení sady výsledků se nazývá 'základní uspořádání'; pokud se v sadě výsledků objeví všechny sloupce řazení, jedná se o „nepodstatné uspořádání“, protože máte dostatek dat na to, abyste si je mohli sami seřadit.




  1. Chyba syntaxe dotazu Postgres sql z phpPgAdmin

  2. Náhodné PHP FastCGI / Reset připojení peerem / neúplné hlavičky

  3. Jak mohu replikovat SHOW TABLES v Hibernate?

  4. mysqli_stmt::bind_param() - zadejte jiný datový typ než s pro každý parametr