1

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

  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

4

3 回答 3

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人员为 customer 下订单4,并仅返回没有此类订单的行。

我假设这Number是 的主键Orders,或者至少是not null

于 2012-06-27T00:13:00.697 回答
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;
于 2012-06-27T00:51:39.343 回答
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;
于 2012-06-27T00:19:09.927 回答