2

と同じ都市に住んでいる顧客を表示しようとしていますWilliam。このクエリは彼の郵便番号を取得し、彼の郵便番号を持つ顧客を見つけます。郵便番号に基づいて都市NAMEの顧客を見つける必要があります。都市名ごとにいくつかの郵便番号があります。

テーブルシティ

zipCode (PK) cityName, stateCode   

テーブルの顧客

customerId (PK) customerName, customerAddress, zipCode (FK)

これまでの私の質問...

SELECT 
    cu2.customerName AS 'Customer Name', 
    ci2.cityName AS 'City Name'
FROM 
    customer as cu
INNER JOIN 
    city as ci ON cu.zipCode = ci.zipCode
INNER JOIN 
    city as ci2 ON ci.cityName = ci2.cityName
INNER JOIN 
    customer as cu2 ON ci2.zipCode = cu2.zipCode
                    AND cu2.customerName <> cu.customerName
WHERE 
    cu2.customerName = 'William'

ウィリアムが住んでいる都市に他に2つの郵便番号がある場合にのみ、ウィリアムの郵便番号をチェックしていると思うので、結果は表示されません。彼は91709で、cityNAMEにはさらに91708と91710があります。そのcityNAME内の他の顧客を取得する必要があります。

4

3 に答える 3

1

私はこれがそれを行うと思います。

SELECT
  allCustomer.customerName,
  allCity.cityName
FROM Customer finder
  JOIN City finderCity
   ON finder.zipCode = finderCity.ZipCode
  JOIN City allCity
    ON finderCity.CityName = allCity.CityName
    AND finderCity.StateCode = allCity.StateCode
  JOIN Customer allCustomer
    ON allCity.ZipCode = allCustomer.ZipCode
WHERE finder.customerName = 'William'
  and allCustomer.customerName != 'William'

いくつかのメモ:

  • customerNameが一意でない場合は、Williamをより適切に識別する必要があります。
  • ON句で結合基準のみを指定してください...そこにフィルタリング基準を配置しないでください。
  • City(概念として)はCityテーブルの複数の行で表されるため、混乱が生じます。
于 2012-11-25T22:06:09.670 に答える
1

このSQLは、モックテーブルでそれを実行します(私は自分で試しました)。

SELECT customer.customerName, city.cityName FROM customer INNER JOIN city on city.zipCode = customer.zipCode WHERE city.cityName = (

SELECT city.cityName FROM city WHERE zipCode = (
SELECT city.zipCode FROM customer
INNER JOIN city ON customer.zipCode = city.zipCode
WHERE customer.customerName = 'William'
)

)
于 2012-11-25T22:13:51.287 に答える
0
Select cityName,customerName from customer
Join City on Customer.zipCode = City.ZipCode
Where 
And customer.customerName = 'William'
Group by cityName, customerName
于 2012-11-25T22:01:32.520 に答える