Czy można zamówić, gdy dane pochodzą z wielu wybranych i złączyć je razem? Jak na przykład
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Jak mogę zamówić to zapytanie według nazwy.
Niektórzy powiedzieli, że możesz zapytać wyglądać tak.
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
Ale w tym przypadku po prostu ignoruję to rozwiązanie.
sql
sql-order-by
union
Guilgamos
źródło
źródło
Odpowiedzi:
Tylko napisz
kolejność według jest stosowana do pełnego zestawu wyników
źródło
źródło
xxx UNION yyy ORDER BY zzz
jest równoznaczne z(xxx UNION yyy) ORDER BY zzz
Aby sortowanie miało zastosowanie tylko do pierwszej instrukcji w UNION, możesz umieścić ją w podselekcji z UNION ALL (obie wydają się być konieczne w Oracle):
Lub (zwracając się do komentarza Nicholasa Careya) możesz zagwarantować, że najwyższy WYBÓR zostanie zamówiony, a wyniki pojawią się nad dolnym WYBIERZ w następujący sposób:
źródło
select
instrukcji odwołującej się do tego podselekcji. Zgodnie ze standardem SQL kolejność wyników jest niezdefiniowana, z wyjątkiem wyraźnejorder by
klauzuli. To pierwszeselect
w twoim przykładzie prawdopodobnie zwraca wyniki w kolejności zwróconej przez podselekcja, ale nie jest to gwarantowane. Co więcej, * to * nie * gwarantuje uporządkowanie zestawu wyników dla całejunion
(ta sama reguła w standardzie). Jeśli zależysz od zamówienia, w końcu zostaniesz ugryziony.SELECT
.Obie pozostałe odpowiedzi są poprawne, ale pomyślałem, że warto zauważyć, że w miejscu, w którym utknąłem, nie zdawałem sobie sprawy, że trzeba będzie zamówić alias i upewnić się, że alias jest taki sam dla obu wybranych ...
zauważ, że w pierwszym zaznaczeniu używam pojedynczych cudzysłowów, ale dla pozostałych używam odwrotnych znaków.
To zapewni ci sortowanie, którego potrzebujesz.
źródło
SELECT a, b, c FROM (<insert union query here>) AS x;
jeśli naprawdę chcesz uniknąć zwracania dodatkowej kolumny.Order By
jest stosowany pounion
, więc po prostu dodajorder by
klauzulę na końcu instrukcji:źródło
Jeśli chcę, aby ten typ był stosowany tylko do jednej z UNII, jeśli używam Unii wszystkie:
źródło
Jak stwierdzono w innych odpowiedziach, „Zamów przez” po OSTATNIEJ Unii należy zastosować do obu zestawów danych połączonych przez unię.
Miałem dwa zestawy danych, ale używałem różnych tabel, ale tych samych kolumn. „Zamów przez” po LAST Union nadal nie działało. Użycie ALIAS dla kolumny używanej w „kolejności według” załatwiło sprawę.
Tak więc rozwiązaniem jest użycie Alias „nazwa_użytkownika”:
źródło
Można użyć tego:
źródło