Как вернуть две случайные строки, используя NEWID ()? - PullRequest
0 голосов
/ 21 января 2012

Я использую SQL Server 2008.

У меня есть запрос, который вытаскивает два случайных BikeID из таблицы, которая называется Bikes. Таблица выглядит так:

 BikeID     BikeName
 1          Bob
 2          Cindy
 3          Carl
 4          Joe
 5          Jane

Я использую функцию NEWID (), чтобы вытащить два случайных идентификатора велосипеда:

SELECT     TOP 2 BikeID
FROM       Bikes
ORDER BY   NEWID()

Мои результаты выглядят так:

 Row - BikeID
 1     5
 2     1

 Row - BikeID
 1     3
 2     4

 Row - BikeID
 1     2
 2     5

 Row - BikeID
 1     3
 2     3

Моя проблема в том, что я придумаю дубликаты, то есть дважды получаю одно и то же число, см. Последний пример результатов. Я НЕ уверен, может ли NEWID () возвращать одно и то же число дважды или нет. Если нет, то я должен иметь сбой в другом месте.

Это на самом деле не те результаты, которые я получаю. Результаты такого рода появляются на моей веб-странице, которая вызывает этот запрос. Итак, я получаю дубликаты на веб-странице. Я не воспроизводил эти результаты, используя только SQL в модуле запросов к базе данных.

Это лучший или правильный способ получить две случайные строки из запроса? Устраняет ли NEWID () возможность возврата дубликатов?

Ответы [ 2 ]

1 голос
/ 21 января 2012

Вы не должны получать дубликаты, потому что вы не можете выбрать одну и ту же строку дважды в таком простом запросе.

Итак, простой ответ: у вас есть 2 строки с BikeID = 3

0 голосов
/ 21 января 2012

Попробуйте добавить DISTINCT перед BikeID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...