2015-02-01 2 views
0

У меня есть две таблицы 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 

ответ

1

Для ваших данных ваш запрос должен возвращать только три строки. Если у вас есть несколько комментариев для человека, вам нужно выбрать, какую позицию комментария вы хотите.

Ниже будет возвращать минимальное значение:

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

Обратите внимание, что CommentPosition был удален из пункта GROUP BY.

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 

Это также будет обрабатывать случай нескольких людей с тем же именем.

Смежные вопросы