我成功地编写了一个查询,列出了销售给特定客户的销售人员,而不是那些没有销售的销售人员。我怀疑是因为销售给特定客户的同一销售人员,也销售给其他客户。
select a.name from salesperson a inner join orders b on
a.salesperson_id = b.salesperson_id where cust_id="4";
我在想,像这样修改相同的查询可以解决问题:
.... a.salesperson_id <> b.salesperson_id where cust_id="4";
但结果列出了所有推销员。这很可能是因为在原始查询中返回的同一销售人员也销售给其他客户
3个表格如下:
Salesperson table
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
Customer table
cust_ID, Name, City Industry Type
4 faralon sacramento H
6 Apple cupertino S
7 Honda NY B
9 Kolb Oshkosh B
Orders table
Number, Order_date, cust_id, salesperson_id, Amount
10 8/2/1996 4 2 540
20 1/30/1999 4 8 1800
30 7/14/1995 9 1 460
40 1/29/1998 7 2 2400
50 2/3/1998 6 7 600
60 3/2/1998 6 7 720
70 5/6/1998 9 7 150
非常感谢任何帮助。 〜Alpinehyker
答案 0 :(得分:2)
您可以这样做:
select a.name from salesperson a
left join orders b on a.salesperson_id = b.salesperson_id and b.cust_id="4"
where b.Number is null
因此,让所有销售人员left join
获得客户4
的订单,并仅返回没有此类订单的行。
我假设Number
是Orders
的主键,或者至少是not null
。
答案 1 :(得分:0)
也许这会起作用
SELECT
s.*
FROM `Salesperson` AS s
LEFT JOIN `Orders` AS o ON o.`salesperson_id` = s.`salesperson_ID`
WHERE
o.`cust_id` NOT IN (4)
GROUP BY s.`salesperson_ID`;
回答你的第二个问题:
SELECT
COUNT(*) AS num_of_orders
,s.`Name`
FROM `Salesperson` AS s
LEFT JOIN `Orders` AS o ON o.`salesperson_id` = s.`salesperson_ID`
GROUP BY s.`salesperson_ID`
HAVING num_of_orders >= 2;
......和第三个问题。 (假设您已准备好highAchiever
表)
INSERT INTO `highAchiever`
(`Name`,`Age`)
SELECT
`Name`
,`Age`
FROM `Salesperson`
WHERE
`Salary` >= 100000;
答案 2 :(得分:0)
所有尚未销售给customer_ID 4的销售人员:
SELECT s.Name FROM Salesperson AS s
LEFT JOIN Orders AS o
ON s.salesperson_ID = o.salesperson_ID
WHERE o.customer_ID <> 4
GROUP BY o.salesperson_ID;