带排除的查询

uxhixvfz  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(294)

我正在尝试编写一个查询,查找所有没有公司订单的销售人员的姓名。
我的问题是:

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

虽然这有点奏效,但我觉得我应该更明确一些。如果你能帮我找到我的错误所在,我会很感激你的帮助。我期待看到的是。。。

Abe
Chris
Dan
Joe

这些表格是:
销售员

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
r3i60tvu

r3i60tvu1#

当将这两个表连接在一起时,只会得到显示在这两个表中的ID以及它们的 cust_id 值不是4,因为您的联接不是 OUTER JOIN ,即。 ids = 1, 2, 7 .
然后,当你陈述 SELECT Name ,您将获得:

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

(the) GROUP BY 在这种情况下,语句是完全无用的,因为您不使用任何 COUNT(...) , SUM(...) 或类似的 SELECT )
如果要避免重复,可以替换 GROUP BY 语句使用 SELECT DISTINCT 而不是 SELECT .
从您所期望的结果来看,我想您应该排除所有使用 cust_id = 4 .
这应该很顺利:

SELECT DISTINCT Name
FROM SalesPerson
WHERE ID NOT IN (SELECT salesperson_id FROM Orders WHERE cust_id = 4)

相关问题