首页 > 解决方案 > 如何通过几个表找到不同的城市名称

问题描述

我有五个表,其中包含有关银行详细信息的人工数据。

我的意图是只选择发生在与其所属客户不同城市的交易。

为了做到这一点,我写了这个查询:

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 的客户,我需要该客户有交易的所有其他城市。为了实现这一点,我将客户表与帐户详细信息和帐户连接起来表。最后我需要为每个客户提供与他们的城市不同的城市。另外在这里我会放位置表

标签: sql-serversubquerywhere-clause

解决方案


如果您也想显示交易城市,请再次加入城市表:

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 是没有意义的。


推荐阅读