2012-11-25 37 views
2

我試圖顯示與William居住在同一城市的客戶。該查詢獲取他的郵政編碼並找到任何具有他的郵政編碼的客戶。我需要根據郵政編碼在城市NAME中找到客戶。每個城市名稱都有一些郵政編碼。由於知道郵政編碼,SQL Server 2008顯示城市名稱

表城市

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' 

,也沒有任何結果,因爲我覺得它只是檢查W當他所在的城市有另外兩個郵政編碼時,illiam的郵政編碼。他是91709,cityNAME還有91708和91710.我需要獲得該城市名稱內的其他客戶。

+0

嗨DDDD,看看我的答案。這應該適合你。謝謝,Mike – Mike91

+0

你可能想看看[this]的接受答案(http://stackoverflow.com/questions/13112899/how-to-get-the-bounding-coordinates-for-a-us- postalzip-code)的問題太多關於郵政編碼的信息。 City在郵政編碼方面並不是真正的概念,但在您的應用程序中可能足夠了。 – HABO

回答

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' 

一些注意事項:

  • 如果客戶名稱不是唯一的,那麼我們需要更好地識別威廉。
  • 只在ON子句中指定連接條件...不要在那裏放置過濾條件。
  • 城市(作爲一個概念)在City表中由多行表示,這會造成混淆。
+0

@DDDD關於selectName子句中的cityName問題,已修復! –

+0

太棒了,這個作品很棒。我會用這個練習一下。 – DDDD

0
Select cityName,customerName from customer 
Join City on Customer.zipCode = City.ZipCode 
Where 
And customer.customerName = 'William' 
Group by cityName, customerName 
+0

客戶中沒有城市名稱。城市名字只在城市桌上。在哪裏只是獲取郵政編碼。城市中還有其他的郵編。沒有看過我的問題。 – DDDD

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' 
) 

) 
+0

我試過它使用相同的表和屬性,如你所述。確保你的城市表被稱爲城市,你的客戶表稱爲客戶,它應該工作。還請確保你的列名是相同的 – Mike91

+0

這效果很好,謝謝你的例子:) – DDDD

+0

請你可以標記爲幫助他人的答案。 – Mike91

相關問題