sql-server - 如何通过几个表找到不同的城市名称
问题描述
我有五个表,其中包含有关银行详细信息的人工数据。
我的意图是只选择发生在与其所属客户不同城市的交易。
为了做到这一点,我写了这个查询:
SELECT c.Cityid,c.FirstName,c.LastName,ci.Name
FROM dbo.Customer c
INNER JOIN dbo.City ci ON ci.ID=c.Cityid
INNER JOIN dbo.Account acc ON acc.CustomerId=c.Id
INNER JOIN dbo.AccountDetails accde ON accde.AccountId=acc.Id
INNER JOIN dbo.Location lo ON lo.LocationTypeId=accde.LocationId
WHERE c.Cityid <>lo.CityId
但不幸的是,我的结果不好,我的代码列出的数据与客户城市相同,而不是交易城市。可能我对 WHERE 表达式有一些错误。
那么有人可以帮我解决这个问题吗?
附件中还有数据库中的表格图。
另外在这里我放了客户表的屏幕截图。在这里的最后一列中,CityId 用黄色标记。
每个客户在城市都有一些交易,这与他们的城市不同。例如,对于 ID 为 1 的客户,我需要该客户有交易的所有其他城市。为了实现这一点,我将客户表与帐户详细信息和帐户连接起来表。最后我需要为每个客户提供与他们的城市不同的城市。另外在这里我会放位置表
解决方案
如果您也想显示交易城市,请再次加入城市表:
SELECT
c.FirstName,
c.LastName,
ci.Name as customer_city,
tci.Name as transaction_city
FROM dbo.Customer c
JOIN dbo.City ci ON ci.ID=c.Cityid
JOIN dbo.Account acc ON acc.CustomerId=c.Id
JOIN dbo.AccountDetails accde ON accde.AccountId=acc.Id
JOIN dbo.Location lo ON lo.LocationTypeId=accde.LocationId
JOIN dbo.City tci ON tci.ID=lo.Cityid -- Added join to city from location
WHERE c.Cityid <>lo.CityId
我从位置添加了另一个加入城市。
我还删除了 CityId 列,因为通常代理 ID 是没有意义的。
推荐阅读
- sap-gui - 在执行 VBA 脚本时禁止弹出 SAP 信息
- amazon-web-services - AWS DynamoDB GSI 查询所有分区
- powershell - 替换变量中的 CR 和 LF
- html - 在其他 z-index 堆叠上下文中显示工具提示
- python - Python xml:解析属性
- r - 如何用R中命名向量中的值替换char矩阵中的元素
- sql - 插入集群中多个表的最佳方法
- apache-kafka-streams - 将 KTable 聚合动态物化到不同的状态存储
- mongodb - MongoDb 4.0.5 问题 - 通过将值从字符串转换为 int 将数组字段项从字符串更新为 int 不起作用
- python - python中的置信区间plotly