Путать с запросом SQL, используя UNIQUE - PullRequest
0 голосов
/ 03 июля 2019

Предположим, у нас есть следующая модель отношений. первичные ключи для каждого отношения отображаются в полужирном :

Моряки ( sid , имя, рейтинг, возраст)

Лодки ( ставка , название, цвет)

Резерв ( Сид, ставка, день )

Я задал следующий вопрос: «Найти моряка, который забронировал лодку 101 в чаще всего ». Ответ был дан следующим образом:

SELECT S.sid
FROM Sailors S
WHERE UNIQUE (SELECT R.sid
              FROM Reserves R
              WHERE R.bid = '101' AND S.sid = R.sid)

Чего я не понимаю, так это того, как этот запрос возвращает моряков, которые не зарезервировали эту лодку. Я получаю, что вложенный запрос возвращает все sids от Моряков, которые зарезервировали хотя бы один раз лодку со ставкой = 101.

Затем, используя предложение "UNIQUE", мы требуем, чтобы sids были уникальными, поэтому мы удаляем дубликаты и храним sids от моряков, которые зарезервировали яхту с bid = 101 один раз.

Однако, получаем ли мы как-то моряков, которые никогда не бронировали лодку 101? Если нет, то мы фактически не рассчитываем моряков, которые зарезервировали лодку 101 не более одного раза, а моряков, которые зарезервировали лодку 101 ровно один раз .

Я прав или мне что-то не хватает?

1 Ответ

0 голосов
/ 03 июля 2019

Я не знаком с УНИКАЛЬНЫМ синтаксисом, но чтобы получить результат, вы можете просто использовать:

SELECT R.sid FROM Reserves R where R.did=101 GROUP BY R.sid HAVING count(*)=1
...