2016-11-17 3 views
0

Die folgende Abfrage funktioniert mit PostgreSQL und ich möchte wissen, warum es nicht mit SQL Server funktioniert 2016.SQL Server, um durch mit max Zeilen in Unterabfrage

select * from (values (1),(2)) as a(a) 
UNION 
(
    select * from (values (1),(2)) as a(a) 
    order by 1 desc 
    offset 0 rows fetch first 1 rows only 
) 
order by 1 desc offset 0 rows fetch first 1 rows only 

Kann jemand mir erklären, warum bestellen von würde hier nicht unterstützt?

Komisch, dass die folgenden, die eine andere Möglichkeit, dies auszudrücken, ist, wie ein Zauber funktioniert

select * from (values (1),(2)) as a(a) 
where a.a in(
    select * from (values (1),(2)) as a(a) 
    order by 1 desc 
    offset 0 rows fetch first 1 rows only 
) 
order by 1 desc offset 0 rows fetch first 1 rows only 

Ist das ein Fehler?

+0

Bestellung per Ordnungsposition ohnehin eine schlechte Gewohnheit ist. Gleich mit Select *. Bei der Bestellung sollten Sie den Spaltennamen anstelle der Ordinalposition verwenden. Was passiert, wenn Sie den Tisch wechseln? Plötzlich funktioniert Ihre Abfrage nicht mehr. –

+0

Dies ist nur ein minimales Beispiel, um das Problem zu Demonstrationszwecken zu zeigen ... –

Antwort

1

Die Abfrage nach der Vereinigung muss als Auswahl präsentiert werden, etwa so:

select * from (values (1),(2)) as a(a) 
UNION 
select * from 
(
select * from (values (1),(2)) as a(a) 
order by 1 desc 
offset 0 rows fetch first 1 rows only 
) b 
order by 1 desc offset 0 rows fetch first 1 rows only 
+0

Ist das nur ein Workaround, von dem Sie erfahren haben oder ist das die Syntax, wie es verwendet werden soll? –

+0

Nun, sql Server interpretiert die erste Version als wählen * aus (Werte (1), (2)) als a ( UNION wählen * aus (Werte (1), (2)) als (a) Sortierung nach 1 desc Versatz 0 Zeilen Abruf zuerst nur 1 Zeilen Sortierung nach 1 desc Versatz 0 Zeilen Abruf zuerst nur 1 Zeilen Dies ist keine gültige Syntax. Die zusätzliche Auswahl * macht es zu einer richtigen Unterabfrage, die der SQL-Server parsen kann. –

+0

Urgh. Formatierung. –