SQL:嵌套子查询错误地返回条目

问题描述

我在使用嵌套子查询查询数据集时遇到了一些麻烦,我认为这很简单。

我有一张客户及其地址dbo.PERSON_ADDRESSES的表,以及与客户dbo.TRANSACT_CUSTOMERS的交易。随着时间的推移,客户在dbo.PERSON_ADDRESSES表中存储多个地址是很常见的。我只是想将dbo.TRANSACT_CUSOMTERS表中的最新事务用于dbo.PERSON_ADDRESSES表中的最新地址的表。

当我独立运行内部子查询时,它运行良好:它显示了我所设想的每个客户的最近一笔交易。但是,由于某种原因,当我运行整个查询时,每个客户获得的地址很多。我不明白为什么。

SELECT MaxTransaction.PERSON_ID,Addr.*
FROM dbo.PERSON_ADDRESSES AS Addr
INNER JOIN
   (SELECT PERSON_ID,Max(TRANSACTION_ID) AS MaxTID
    FROM dbo.TRANSACTION_CUSTOMERS 
    GROUP BY PERSON_ID) AS MaxTransaction
ON MaxTransaction.MaxTID = Addr.TRANSACTION_ID

解决方法

我猜一个交易可以有多个客户。要获得每人一行,请使用其他JOIN条件:

SELECT maxp.PERSON_ID,pa.*
FROM dbo.PERSON_ADDRESSES pa JOIN
     (SELECT PERSON_ID,Max(TRANSACTION_ID) AS MaxTID
      FROM dbo.TRANSACTION_CUSTOMERS 
      GROUP BY PERSON_ID
     ) maxp
     ON maxp.person_id = pa.person_id AND
        maxp.MaxTID = pa.TRANSACTION_ID;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...