从数据库中获取不同行的最佳方法

时间:2015-02-01 21:54:05

标签: sql sql-server

我有两个表tbPerson和tbComment,数据如下:

tbPerson
PersonID FirstName LastName
1        William   Tell
2        Joe       Smith
3        Sam       Hampton

tbComment
CommentID    PersonID   CommentValue               CommentPosition
45           2          This is my comment         100
46           2          This is my second comment  100
47           2          This is my third comment   100
48           1          A comment                  101
49           3          This comment rules         102
50           3          A comment here             102

我需要一个只返回的查询:

William Tell 101
Joe Smith    100
Sam Hampton  102

我认为它类似于下面,但这会返回多行。我只想要三排。

SELECT FirstName, LastName, CommentPosition
FROM tbPerson
JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID
GROUP BY FirstName, LastName, CommentPosition

3 个答案:

答案 0 :(得分:1)

对于您的数据,您的查询应仅返回三行。如果您对某人有多条评论,则需要选择所需的评论位置。

以下内容将返回最小值:

SELECT FirstName, LastName, MIN(CommentPosition) as CommentPosition
FROM tbPerson JOIN
     tbComment
     ON tbPerson.PersonID = tbComment.PersonID
GROUP BY FirstName, LastName;

请注意,CommentPosition条款已删除GROUP BY

答案 1 :(得分:0)

如果评论位置有所不同,请尝试以下操作:

SELECT FirstName, LastName, CommentPosition
FROM tbPerson
INNER JOIN (
SELECT PersonID, MIN(CommentPosition) AS CommentPosition
FROM tbComment
GROUP BY PersonID
) T1 ON tbPerson.PersonID = T1.PersonID

这也将处理多个具有相同名称的人的情况。

答案 2 :(得分:-1)

您可以使用SELECT DISTINCT FirstName, LastName, ...来获得您想要的内容。这是一个关于它的教程。

http://www.mysqltutorial.org/mysql-distinct.aspx