Как избавиться от дубликатов при внутреннем объединении в SQL Server - PullRequest
1 голос
/ 30 августа 2011

Я присоединяюсь к 3 таблицам Opportunity, Lead, Notes

Select 
     Distinct O.oppo_jobid, O.oppo_status,
     cast(N.Note_Note as NCHAR) as Notes 
from Opportunity O, Notes N
Inner join Notes on o.Oppo_OpportunityId = Notes.Note_ForeignId 
Inner join Lead on o.Oppo_OpportunityId = Lead.Lead_OpportunityID

Я получаю дубликаты. Как избежать дубликатов при использовании внутреннего соединения?

Основная таблица равна Opportunity, а Notes сравнивается с opportunity id, а в таблице Notes имеется много записей с одинаковыми возможностями, поэтому происходит дублирование. Теперь, как я могу избежать дубликатов при сравнении таблицы и получении последней обновленной заметки.

Заранее спасибо ...

1 Ответ

4 голосов
/ 30 августа 2011

Убедитесь, что вы случайно не сделали здесь декартово произведение:

from Opportunity O, Notes N

Это должно быть только

from Opportunity O

Вы уже ВНУТРЕННИМ присоединенииТаблица Notes позже ....

Так что этот запрос, мы надеемся, не должен возвращать дубликаты:

Select 
     O.oppo_jobid, O.oppo_status,
     cast(N.Note_Note as NCHAR) as Notes 
from dbo.Opportunity O
Inner join dbo.Notes on o.Oppo_OpportunityId = Notes.Note_ForeignId 
Inner join dbo.Lead on o.Oppo_OpportunityId = Lead.Lead_OpportunityID

Обновление: , если вы хотите только самые последние note для каждой возможности - используйте этот запрос:

;WITH MostRecent AS
(
    SELECT 
        O.oppo_jobid, O.oppo_status,
        cast(N.Note_Note as NCHAR) as Notes,
        ROW_NUMBER() OVER (PARTITION BY o.Oppo_OpportunityId 
                           ORDER BY n.Note_DateTimeStamp DESC) AS 'RowNum'
    FROM dbo.Opportunity O
    INNER JOIN dbo.Notes on o.Oppo_OpportunityId = Notes.Note_ForeignId 
)
SELECT *
FROM MostRecent
WHERE RowNum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...