无法编写查询,列出所有未出售给特定客户的销售人员

时间:2012-06-26 23:56:59

标签: 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_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

3 个答案:

答案 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的订单,并仅返回没有此类订单的行。

我假设NumberOrders的主键,或者至少是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;
相关问题