Oracle SQL: LEAST () возвращает несколько строк ...? - PullRequest
4 голосов
/ 24 февраля 2009

Ко мне только что пришел сотрудник с удивительным SQL-запросом:

(в основном)

SELECT LEAST(id) FROM tableA A, tableB B WHERE a.name = b.name(+)

В возвращенном наборе результатов перечислены три числа:

МЕНЕЕ (ID)
--------------
621
644
689

(все идентификаторы, которые соответствуют запросу, как если бы в нем отсутствовала функция LEAST)

Почему? =)

1 Ответ

14 голосов
/ 24 февраля 2009

LEAST (x, y, ...) не является агрегатной функцией. Работает только по своим параметрам. Функция, которую вы хотите, это MIN (x).

Для каждой записи вы запускаете LEAST (id), который всегда будет возвращать id. Если бы вы передавали МЕНЬШЕ больше параметров, вы бы увидели разные результаты. Например, LEAST(5,6,7) = 5. LEAST всегда возвращает наименьшее своих параметров , тогда как MIN возвращает наименьшее каждой записи .

...