加入另一张桌子的最新记录

时间:2019-11-25 18:41:58

标签: sql ms-access

我有两个数据集 第一个:客户-具有每个客户的ID及其属性等。 第二个:评论-每个客户都有多个评论

在“评论”表中,我还具有与该评论相关的客户的ID,但是每个客户可能会有多个评论。

我想在第一个表(客户)上为他们做的最后一条评论。

SELECT Customers.Name
FROM Customers LEFT JOIN
     Comments
     ON Customers.ID = (SELECT MAX(CommentID)
                        FROM Comments
                        WHERE Customers.ID = Comments.CustomerID
                       )

我正在使用MAX(CommentID)来获取添加到表中的最后一条注释。

但是这会引发语法错误,我在做什么错了?

2 个答案:

答案 0 :(得分:0)

我认为这是您想要的:

SELECT cu.Name, co.*
FROM Customers cu LEFT JOIN
     Comments co
     ON co.customerId = cu.ID AND
        co.ID = (SELECT MAX(co2.ID)
                 FROM Comments co2
                 WHERE co.CustomerID = co2.CustomerID
                );

在MS Access中,您可能必须这样写:

SELECT cu.Name, co.*
FROM Customers as cu LEFT JOIN
     Comments as co
     ON co.customerId = cu.ID AND
WHERE co.ID IS NULL OR
      co.ID = (SELECT MAX(co2.ID)
               FROM Comments as co2
               WHERE co.CustomerID = co2.CustomerID
              );

尽管您的查询在逻辑上不正确,但我不确定为什么会有语法错误。一种可能是两个表中的id具有不兼容的类型。也许您没有在查询中正确命名列。

答案 1 :(得分:0)

首先获取每个客户的所有最新评论,然后加入表格:

SELECT cus.Name, com.*
FROM Customers AS cus LEFT JOIN (
  SELECT * FROM Comments
  WHERE CommentID IN (
    SELECT MAX(CommentID)
    FROM Comments
    GROUP BY CustomerID
  )
) AS com ON cus.ID = com.CustomerID