SQL Server 2008根据邮政编码显示城市名称

标签 sql sql-server-2008

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

相关文章:

sql-server - SQL Server 2008 中 ID 列的最佳类型

sql - 如何更新表中的所有行并增加一列?

mysql - 来自不同表的复杂浮点计算

php - 如何在 php 和 sql 中创建聊天对话列表?

php - 使用 MYSQL 在同一部电影中插入多个 Actor

sql - 如何格式化 SQLCMD 输出

mysql - 使用groovy连接MySQL表后如何使用表别名来区分多个属性

sql - 如何批量插入数据到两个SQL表

c# - 是否有些 Func 无法转换为等价的表达式?

sql - 了解何时对连接使用子查询