0

従業員と同じ州(または地域) にいない、米国を拠点とするすべての顧客の会社名をリストしようとしています。10 行を返す必要があります。これには次のクエリを使用しました

SELECT Customers.CompanyName
FROM Customers
WHERE Customers.Country='USA'
  AND Customers.Region IN
    (SELECT Customers.Region
     FROM Customers
     GROUP BY Customers.Region HAVING COUNT(Customers.Region)=1);

しかし、6 しか返されません。

データベースはノースウィンドです。**会社名


here is the output
Old World Delicatessen
Let's Stop N Shop
Save-a-lot Markets
The Cracker Box
Rattlesnake Canyon Grocery
Split Rail Beer & Ale**
4

2 に答える 2

4

これを試して

SELECT CompanyName
  FROM Customers
 WHERE Country='USA' AND 
       Region NOT IN
           (SELECT DISTINCT Region
              FROM Employees 
             WHERE Region IS NOT NULL);

出力

CompanyName
----------------------------------------
Great Lakes Food Market
Hungry Coyote Import Store
Let's Stop N Shop
Lonesome Pine Restaurant
Old World Delicatessen
Rattlesnake Canyon Grocery
Save-a-lot Markets
Split Rail Beer & Ale
The Big Cheese
The Cracker Box

(10 row(s) affected)

あなたの質問では、どの従業員とも同じ州 (または地域) にいない米国を拠点とするすべての顧客の会社名が必要であると述べました。しかし、クエリでは、代わりにCustomersテーブルから地域を取得しようとしていました。

更新:あなたはそれを知っていると思いますが、念のために:

NULLsubquery( WHERE Region IS NOT NULL)内の値の明示的なチェックは非常に重要です。これがないと、クエリは正常に実行されますが、行は返されません。

SELECT CompanyName
  FROM Customers
 WHERE Country='USA' AND 
       Region NOT IN
           (SELECT DISTINCT Region
              FROM Employees);

出力:

CompanyName
----------------------------------------

(0 row(s) affected)

あなたが達成しようとしていた演習は、サブクエリの NULL について知っていることを確認するためのものだったと思います。

于 2013-03-03T22:04:56.717 に答える
1

Employeesあなたのクエリはテーブルをまったくチェックしません!それをチェックしてください:

SELECT Customers.CompanyName, customers.Region
FROM Customers
WHERE Customers.Country='USA'
AND NOT EXISTS(SELECT 1 FROM Employees WHERE Employees.Region = Customers.Region)

また

SELECT Customers.CompanyName, customers.Region
FROM Customers
WHERE Customers.Country='USA'
AND  Customers.Region NOT IN (SELECT DISTINCT Employees.Region FROM Employees WHERE Employees.Region IS NOT NULL)

どちらのクエリも次を返します。

Great Lakes Food Market         OR
Hungry Coyote Import Store      OR
Let's Stop N Shop               CA
Lonesome Pine Restaurant        OR
Old World Delicatessen          AK
Rattlesnake Canyon Grocery      NM
Save-a-lot Markets              ID
Split Rail Beer & Ale           WY
The Big Cheese                  OR
The Cracker Box                 MT
于 2013-03-03T22:06:23.433 に答える