2012-06-26 52 views
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

回答

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 

所以,讓所有salepersons,left join訂單客戶4,並返回只有在有沒有這樣的命令行。

我假設NumberOrders或至少not null的主鍵。

+0

工作這兩個答案!謝謝。 – alpinehyker

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; 

...和第3個問題。 (假設你有你的highAchiever表準備)

INSERT INTO `highAchiever` 
(`Name`,`Age`) 
SELECT 
    `Name` 
    ,`Age` 
FROM `Salesperson` 
WHERE 
    `Salary` >= 100000; 
+0

我不這麼認爲 - 這會給你所有不是顧客4的訂單的銷售人員 - 它只會排除只向顧客4銷售(或根本不銷售)的銷售人員。此外,你會得到重複的行:每個訂單一個,而不是每個銷售人員。 – Blorgbeard

+0

這工作!謝謝。我有幾個問題,我有困難。也許你可以幫助這些呢?問題2 ... 2.具有2個或更多訂單的銷售人員的姓名 3.編寫SQL語句以將行插入名爲highAchiever(Name,Age)的表中,其中銷售人員必須具有100,000的工資或更大的被列入表中。非常感謝。 – alpinehyker

+0

我編輯了我原來的答案 –

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;