Я пытаюсь написать запрос, в котором находятся все имена продавцов, у которых нет заказов с компанией.
У меня есть запрос:
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
При объединении этих двух таблиц вы получаете только идентификаторы, которые отображаются в обеих таблицах, а значение 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)
GROUP BY
, поэтому использование GROUP BY
безусловно, не будет «бесполезным».