sql >> Databáze >  >> RDS >> Sqlserver

Klauzule OrderBy má za následek různé sady výsledků, pokud má sloupec objednávky stejná data

Toto je "by design"

SQL Server (nebo jakýkoli RDBMS) nezaručuje, že výsledky budou vráceny v určitém pořadí, pokud není uvedeno ORDER BY byla upřesněna doložka. Někteří lidé si myslí, že řádky jsou vždy vráceny v pořadí seskupeného indexu nebo pořadí fyzického disku, pokud není zadáno žádné pořadí podle klauzule. To je však nesprávné, protože existuje mnoho faktorů, které mohou během zpracování dotazu změnit pořadí řádků. Paralelní spojení HASH je dobrým příkladem pro operátor, který mění pořadí řádků.

Pokud zadáte ORDER BY klauzule, SQL Server seřadí řádky a vrátí je v požadovaném pořadí. Pokud však toto pořadí není deterministické, protože máte duplicitní hodnoty, v každé „skupině hodnot“ je pořadí „náhodné“ ze stejných důvodů, které jsou uvedeny výše.

Jediný způsob, jak zaručit deterministické pořadí, je zahrnout zaručeně jedinečný sloupec nebo skupinu sloupců (například primární klíč) do ORDER BY doložka.



  1. Oracle – se vztahem jedna k mnoha vyberte různé řádky na základě minimální hodnoty

  2. Řetězce formátu data MariaDB

  3. Více podmínek v klauzuli WHERE

  4. Prevence duplicitních hodnot v databázi - mysql