我正在尝试显示与 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'
它没有显示任何结果,因为我认为它只是在威廉所在的城市有其他两个邮政编码时检查他的邮政编码。他的号码是 91709,cityNAME 还有 91708 和 91710。我需要获取该 cityNAME 内的其他客户。
最佳答案
我认为这样就可以了。
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 子句中指定连接条件...不要在其中放置过滤条件。
- 城市(作为一个概念)由城市表中的多行表示,这会导致困惑。
关于SQL Server 2008根据邮政编码显示城市名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13555890/