我有两个数据集 第一个:客户-具有每个客户的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)来获取添加到表中的最后一条注释。
但是这会引发语法错误,我在做什么错了?
答案 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