Mysql 在编写列出所有未销售给特定客户的销售人员的查询时遇到问题

Mysql 在编写列出所有未销售给特定客户的销售人员的查询时遇到问题,mysql,sql,Mysql,Sql,我成功地编写了一个查询,该查询列出了确实向特定客户销售产品的销售人员,但没有列出那些没有向特定客户销售产品的销售人员。我怀疑这是因为销售给特定客户的销售人员也销售给其他客户 select a.name from salesperson a inner join orders b on a.salesperson_id = b.salesperson_id where cust_id="4"; 我在想,像这样修改同一个查询可以达到以下目的: .... a.salesperson_i

我成功地编写了一个查询,该查询列出了确实向特定客户销售产品的销售人员,但没有列出那些没有向特定客户销售产品的销售人员。我怀疑这是因为销售给特定客户的销售人员也销售给其他客户

  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";

任何帮助都将不胜感激~Alpinehyker

您可以这样做:

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
因此,将所有Saleperson转到customer
4
的订单,只返回没有此类订单的行

我假设
Number
Orders
的主键,或者至少
notnull

这可能会起作用

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
表格)


所有未销售给客户的销售人员\u 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;
从Salesperson中选择s.Name作为s
左连接命令为o
在s.salesperson_ID=o.salesperson_ID上
其中o.customer_ID 4
按o.销售人员编号分组;

我不这么认为-这将为您提供所有非针对客户4的订单的销售人员-它将仅排除仅向客户4销售(或根本没有销售)的销售人员。此外,您将获得重复的行:每个订单一行,而不是每个销售人员一行。这很有效!非常感谢。我还有几个问题很难回答。也许你也能帮上忙?问题2。。。2.有2个或更多订单的销售人员的姓名3。编写一条SQL语句,将行插入名为highAchiever(姓名、年龄)的表中,其中销售人员必须具有100000或更高的工资才能包含在表中。非常感谢。@marcin非常感谢您的帮助!我尝试的第二个问题的查询语法与您提供的语法非常接近,但我就是无法正确理解。至于第三个问题。。。我想得太多了。谢谢你,我很感谢你的帮助和专业知识!
INSERT INTO `highAchiever`
(`Name`,`Age`)
SELECT 
    `Name`
    ,`Age`
FROM `Salesperson`
WHERE
    `Salary` >= 100000;
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;