что (если что-нибудь) не так со следующим SQL?(имея и группировать по) - PullRequest
0 голосов
/ 25 сентября 2018

Я столкнулся с практическим вопросом в Интернете, но пока не смог найти удовлетворительного ответа.

Предположим, у нас есть две таблицы, которые выглядят следующим образом

Представление таблицы

Если это так, то с чем (если что-то) не такследующий SQL?:

SELECT Name
FROM Orders, Salesperson
WHERE Orders.salesperson_id = Salesperson.ID
GROUP BY salesperson_id
HAVING COUNT( salesperson_id ) >1

Я получил этот вопрос от https://www.programmerinterview.com/index.php/database-sql/advanced-sql-interview-questions-and-answers/

Эта ссылка на самом деле имеет ответ и объяснение вопроса.

Я думаю, что понимаю объяснение, но я все еще думаю, что этот запрос ДОЛЖЕН выполняться без ошибок.И результат будет точным, потому что нет повторяющихся имен (salespersonid и name однозначно соответствуют 1: 1).

Может кто-нибудь объяснить мне, если я ошибаюсь и что мне здесь не хватает?

1 Ответ

0 голосов
/ 25 сентября 2018

База данных выдает сообщение об ошибке, потому что не может вывести, что для каждого id.

существует уникальный name. Некоторые системы баз данных достаточно умны для такого вычета, но не все.

Конечно, вы правы, что для вашего запроса есть однозначный результат;это просто случай, когда вы умнее, чем искусственный интеллект оптимизатора запросов.

На самом деле это хорошая идея, чтобы оптимизатор не стал слишком умным: циклы, необходимые для такого вывода, имели быбыть потраченным на все запросов, включая большинство запросов, которые не нуждаются в этом.

И этот запрос легко исправить, верно?

...