如何通过几个表找到不同的城市名称

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 个表?

如何从不同的表中以最优化的方式获取国家、州、城市名称

使用 phpMyAdmin 中的文件夹组织数据库

如何创建一个脚本来合并另一个表中的几个表?

Elasticsearch 通过几个不同权重的 geo_points 过滤

加入 3 个表,从 2 个不同的表和按材料名称分组的总数量