Запрос с исключением

0

Я пытаюсь написать запрос, в котором находятся все имена продавцов, у которых нет заказов с компанией.

У меня есть запрос:

SELECT Name
FROM Salesperson
JOIN Orders ON orders.salesperson_id = Salesperson.ID
    WHERE cust_id <> 4
GROUP BY Name;

Хотя это несколько работает, я чувствую, что я должен быть более явным. Если бы вы могли помочь мне в том, где я ошибаюсь, я был бы признателен за помощь. То, что я ожидаю увидеть...

Abe
Chris
Dan
Joe

Таблицы:

SalesPerson

ID    Name    Age    Salary
1   Abe 61  140000
2   Bob 34  44000
5   Chris   34  40000
7   Dan 41  52000
8   Ken 57  115000
11  Joe 38  38000

Покупатель

ID    Name    City    Industry
4   Samsonic    plesant J
6   Panasung    oaktown J
7   Samony  Jackson B
9   Orange  Jackson B

заказы

Number    Date    cust_id    salesperson_id    amount
10  1996-08-02  4   2   540
20  1999-01-30  4   8   1800
30  1995-07-14  9   1   460
40  1998-01-29  7   2   2400
50  1998-02-03  6   7   600
60  1998-03-02  6   7   720
70  1998-05-06  9   7   150
  • 0
    Какой результат вы получаете сейчас? Я не вижу ничего плохого в вашем коде.
  • 0
    Я вижу Эйба, Боба и Дэна, но думаю, что Боб должен быть исключен, так как у них есть заказ в этой компании, и я думаю, что результатом должны быть Эйб, Крис, Дэн, Джо
Теги:

1 ответ

1
Лучший ответ

При объединении этих двух таблиц вы получаете только идентификаторы, которые отображаются в обеих таблицах, а значение cust_id не равно 4, так как ваше соединение не является OUTER JOIN, т.е. ids = 1, 2, 7.

Затем, когда вы SELECT Name, вы получите следующее:

Abe   // id = 1
Bob   // id = 2
Dan   // id = 7

(В этом случае оператор GROUP BY совершенно бесполезен, так как вы не используете никаких COUNT(...), SUM(...) или подобных в SELECT)
Если вы хотите избежать повторения, вы можете заменить оператор GROUP BY с помощью SELECT DISTINCT вместо SELECT.

Из ожидаемого результата, я полагаю, вы хотите исключить все идентификаторы SalesPerson, которые сделали заказ с cust_id = 4.

Это должно работать гладко:

SELECT DISTINCT Name
FROM SalesPerson
WHERE ID NOT IN (SELECT salesperson_id FROM Orders WHERE cust_id = 4)
  • 0
    Спасибо Даниэле, это сработало хорошо. Я не думал об исключении для избранных.
  • 0
    Примечание. MySQL часто реализует различные функции с использованием GROUP BY , поэтому использование GROUP BY безусловно, не будет «бесполезным».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню