Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Аналог TOP 1  [new]
Gric_Art
Member

Откуда:
Сообщений: 48
Подскажите, что использовать для вывода одной строки в запросе, чтобы он работал везде.
Имеется ввиду что в MySql допустим используется LIMIT, а не TOP.

В общем как на чистом SQL вывести только одну запись?
30 ноя 16, 14:24    [19951524]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
странное желание же. ты уж определись, тебе шашечки или ехать?
30 ноя 16, 14:29    [19951555]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20978
Gric_Art
как на чистом SQL вывести только одну запись?
В общем случае никак - всегда возможны дубликаты по ключу сортировки, и при выводе одной записи результат не определён. Но если ключ сортировки уникален, то "на чистом SQL" придётся получить в подзапросе MAX (или MIN) ключа сортировки, и использовать его для отбора нужной записи.

Либо нумеровать записи (если "на чистом SQL" - то две копии таблицы, связанные по неравенству) и брать ту, где номер равен 1.
30 ноя 16, 14:33    [19951590]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
Gric_Art
Member

Откуда:
Сообщений: 48
Akina,

А как нумеровать таблицы на чистом SQL? O_o
В MS SQL знаю ROW_NUMBER()
30 ноя 16, 14:42    [19951652]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
Gric_Art
В общем как на чистом SQL вывести только одну запись?
если под "чистым" вы понимаете ANSI, то нужно использовать offset и fetch. Но учитывайте, что, например, мускуль не поддерживает стандарт.
30 ноя 16, 14:43    [19951671]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7439
Gric_Art,

На "чистом SQL" только на этапе вставки в таблицу. ROW_NUMBER() в общем случае может не иметь реализации на "нечистых SQL СУБД".
30 ноя 16, 14:44    [19951678]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
Gric_Art
А как нумеровать таблицы на чистом SQL?
прочитайте наконец ANSI стандарт если уж вам так нужно.
30 ноя 16, 14:44    [19951680]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20978
[quote Gric_Art]как нумеровать таблицы на чистом SQL?[/quote]
SELECT t1.*, COUNT(t2.unique_field) AS row_number
FROM table AS t1, table AS t2
WHERE t1.unique_field >= t2.unique_field -- уникальное поле сортировки, если нужен обратный порядок, то использовать <=
GROUP BY t1.* -- само собой тут не звезда, а перечисление полей
30 ноя 16, 14:49    [19951713]     Ответить | Цитировать Сообщить модератору
 Re: Аналог TOP 1  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Дедушка
Gric_Art
В общем как на чистом SQL вывести только одну запись?
если под "чистым" вы понимаете ANSI, то нужно использовать offset и fetch. Но учитывайте, что, например, мускуль не поддерживает стандарт.
+100500
Правда, WITH TIES никак не сделать.
Если говорить не в данном случае, а обобщённо.
30 ноя 16, 16:08    [19952204]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить