Zachowanie, które opisujesz, dzieje się, gdy ORDER BY
wyrażenie, które nie występuje w klauzuli SELECT
. Standard SQL nie dopuszcza takiego zapytania, ale MySQL jest mniej ścisły i pozwala na to.
Spróbujmy przykład:
SELECT DISTINCT colum1, column2
FROM table1
WHERE ...
ORDER BY column3
Powiedzmy zawartość tabeli table1
jest:
id | column1 | column2 | column3
----+---------+---------+---------
1 | A | B | 1
2 | A | B | 5
3 | X | Y | 3
Bez klauzuli ORDER BY
powyższe zwroty kwerendy następujące dwa rekordy (bez ORDER BY
kolejność nie jest gwarantowane):
column1 | column2
---------+---------
A | B
X | Y
Ale z ORDER BY column3
zamówienie również nie jest gwarantowane.
Klauzula DISTINCT
działa na wartości wyrażeń obecnych w klauzuli SELECT
. Jeśli wiersz nr 1 jest przetwarzany jako pierwszy, wówczas (A
, B
) zostaje umieszczony w zestawie wyników i jest powiązany z wierszem nr 1. Następnie, gdy przetwarzany jest wiersz nr 2, wartości wyrażeń SELECT
generują rekord (A
, B
), który już znajduje się w zestawie wyników. Z powodu DISTINCT
jest on upuszczany. Wiersz nr 3 produkuje (X
, Y
), który jest również umieszczany w zestawie wyników. Następnie klauzula ORDER BY column3
powoduje, że rekordy są sortowane w zestawie wyników jako (A
, B
), (X
, Y
).
Ale jeśli rząd nr 2 jest przetwarzany przed rzędu # 1 następnie, zgodnie z tą samą logiką odsłoniętą w poprzednim akapicie, zapisy w zestawie wyników są klasyfikowane jako (X
, Y
), (A
, B
).
Na silniku bazy danych nie obowiązuje żadna reguła dotycząca kolejności przetwarzania wierszy podczas uruchamiania kwerendy. Baza danych może przetwarzać wiersze w dowolnej kolejności, którą uważa za lepszą pod względem wydajności.
Twoje zapytanie jest nieprawidłowe. Potwierdza to fakt, że może zwracać różne wyniki przy użyciu tych samych danych wejściowych.
Jakie są zapytania, które próbujesz uruchomić? – srivani
@srivani: Wybierz wyraźny identyfikator z tabeli, gdzie id2 = 12312 porządek według czasu. – insomiac
Wiem, że jest już za późno, ale nie ma jeszcze zaakceptowanej odpowiedzi, więc chcę się dowiedzieć, czy OP nadal chce odpowiedzi na coś, czego nie obejmują podane odpowiedzi? –