sql >> Databáze >  >> RDS >> Oracle

Zajímavý problém s Oracle UNION a ORDER BY

To ve skutečnosti neodpovídá na otázku, ale zdá se, že jde spíše o chybu analyzátoru (nebo „funkci“) než o jazykový požadavek.

Podle podpory My Oracle se zdá, že to bylo nahlášeno jako chyba 14196463, ale uzavřeno bez vyřešení. Je to také zmíněno v komunitním vláknu 3561546. Abyste však mohli vidět kterýkoli z nich, potřebujete účet MOS nebo alespoň účet Oracle.

Bylo to také diskutováno ve vláknu OTN, které vyžaduje základní přihlášení Oracle spíše než účet MOS, pokud mohu říci. To také nemá mnoho informací, ale opakuje vaše zjištění a také naznačuje, že chování existovalo minimálně do 9.2.0.8 a možná mnohem dříve.

Dokumentace je trochu vágní, ale nenaznačuje, že by to měl být problém:

Pro složené dotazy obsahující množinové operátory UNION , INTERSECT , MINUS nebo UNION ALL , ORDER BY klauzule musí specifikovat pozice nebo aliasy spíše než explicitní výrazy. Také ORDER BY klauzule se může objevit pouze v posledním komponentním dotazu. ORDER BY klauzule objednává všechny řádky vrácené celým složeným dotazem.

Vytváříte alias vašeho výrazu a používáte to, a to neznamená, že musíte vytvořit alias konkrétních komponent (ačkoli to samozřejmě neříká, že nemusíte musí buď).

Zdá se, že chování není v souladu s aliasem platným pro konečnou projekci a obvyklým pravidlem, že alias je platný pouze v pořadí podle klauzule – zdá se, že to padá někde mezi.



  1. MySQL přeskočit prvních 10 výsledků

  2. MySql sečte prvky sloupce

  3. Jak zobrazit datum ve formátu iso 8601 pomocí PHP

  4. Co dělá návrhář databází?