【问题标题】:SQL Server 2008 display city name from knowing zip codeSQL Server 2008 根据邮政编码显示城市名称
【发布时间】:2012-11-25 21:52:35
【问题描述】:

我正在尝试显示与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'

它没有显示任何结果,因为我认为当他所在的城市有另外两个邮政编码时,它只会检查 William 的邮政编码。他的号码是 91709,cityNAME 还有 91708 和 91710。我需要找到该 cityNAME 内的其他客户。

【问题讨论】:

  • 嗨 DDDD,看看我的回答。这应该适合你。谢谢,迈克
  • 您可能想查看对this 问题的接受答案,以了解有关邮政编码的太多信息。城市并不是关于邮政编码的真正概念,但在您的应用程序中可能就足够了。

标签: sql sql-server-2008


【解决方案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 表中由多行表示,这会导致混淆。

【讨论】:

  • @DDDD 关于 select 子句中的 cityName 问题,已修复!
  • 太棒了,这很好用。我会用这个练习一下。
【解决方案2】:

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

)

【讨论】:

  • 我尝试使用与您所说的相同的表和属性。确保您的 city 表称为 city 并且您的 customer 表称为 customer 并且它应该可以工作。还要确保您的列名相同
  • 我把另一个标记为答案,这个不显示cityName
  • 没问题,虽然我没有看到任何显示 cityName 的要求。我已经修改了上面的内容以显示这一点......
【解决方案3】:
Select cityName,customerName from customer
Join City on Customer.zipCode = City.ZipCode
Where 
And customer.customerName = 'William'
Group by cityName, customerName

【讨论】:

  • 客户中没有城市名称。城市名称仅在城市表中。在仅获取邮政编码的地方。该市还有其他邮政编码。没有阅读我的问题。
猜你喜欢
  • 2018-09-21
  • 2012-05-07
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多