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

どんな助けでも大歓迎です。〜アルパインハイカー

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を顧客4の注文に応じて取得し、そのような注文がない行のみを返します。

それが、、または少なくともNumberの主キーであると想定しています。Ordersnot 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`;

2番目の質問への回答:

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;
于 2012-06-27T00:19:09.927 に答える