如何通过几个表找到不同的城市名称
Posted
技术标签:
【中文标题】如何通过几个表找到不同的城市名称【英文标题】:How to find different names of cities via several tables 【发布时间】:2020-09-21 13:05:07 【问题描述】:我有五个表,其中包含有关银行详细信息的人工数据。
我的意图是只选择发生在与其所属客户不同城市的交易。
为了做到这一点,我写了这个查询:
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 的客户,我需要该客户有交易的所有其他城市。为了实现这一点,我将客户表与帐户连接起来详细信息和帐户表。最后我需要为每个客户提供与他们的城市不同的城市。另外在这里我会放位置表
【问题讨论】:
通过不同的交易,您的意思是必须存在一个客户,其中至少有两个位置 ID 不同的 AccounDetails 条目?您能否提供一个示例,说明您希望展示的客户和您不想展示的客户? 我更新了我的问题。现在可能更好? 您的查询看起来不错。它的结果到底有什么问题? 我的查询返回与表客户相同的城市。实际上我的目的是在客户表中找到与城市不同的城市。例如,消费者表中的城市是每个客户的家乡,但他们在其他城市外出并进行交易。所以我试图找到与他们所在城市不同的交易 【参考方案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
我从 Location 添加了另一个到 City 的连接。
我还删除了 CityId 列,因为通常代理 id 没有意义。
【讨论】:
没错!这是我正在寻找的查询。谢谢@Bohemian @silent_hunter 没问题? 亲爱的@Bohemian,我有一些与类似主题相关的新问题https://***.com/questions/64101287/estimate-male-and-female-customers-by-partition,所以请检查您是否能够。提前谢谢你以上是关于如何通过几个表找到不同的城市名称的主要内容,如果未能解决你的问题,请参考以下文章
LARAVEL 如何连接 2 个不同的数据库并连接不同服务器上的 2 个表?