2017-01-21 5 views
1

У меня есть хранимая процедура, которая не была написана мной.Почему соединение в одной таблице дважды возвращает разные значения столбцов?

Я не могу понять, как они присоединяются к тем же таблицам tblUsers дважды, и он возвращает различные значения столбцов:

select distinct 
    usr.Name_FirstLast AS AssignedTo, 
    usr1.Name_FirstLast as AssignedBy 
from 
    dbo.tblNoteStore nt_str 
join 
    dbo.tblNoteEntities entit ON nt_str.ID = entit.NoteGUID 
join 
    dbo.tblNoteDiaries nt_dia ON nt_str.ID = nt_dia.NoteGUID 
join 
    dbo.tblNoteEntries entri on nt_str.ID = entri.NoteGUID 
          and nt_dia.EntryGUID = entri.ID 
          and entit.NoteGUID = entri.NoteGUID 
left join 
    dbo.tblNoteRecipients recip ON entri.ID = recip.EntryGUID 
--this is where the same table used twice 
left join 
    dbo.tblUsers usr ON recip.UserGUID = usr.UserGUID -- returns AssignedTo column 
left join 
    dbo.tblUsers usr1 ON usr1.UserGuid = entri.UserGUID -- returns AssignedBy column 
where 
    usr.UserGUID = '55610B2F-1997-40C0-9F01-EED3ED2939F9' 

Результат является то, что мне нужно, но почему это происходит именно так?

  • dbo.tblUsers имеет первичный ключ UserGUID
  • dbo.tblNoteEntries имеет внешний ключ UserGUID
  • dbo.tblNoteRecipients имеет внешний ключ UserGUID

enter image description here

Кроме того, я должен использовать все эти таблицы в JOIN, чтобы получить результат?

+0

Duplicate of [Почему объединение двух одинаковых таблиц в двух разных столбцах возвращает разные значения столбцов?] (Http://stackoverflow.com/questions/41781241/why-joining-same-table-twice-on-two-different- колонны-возвращает-разные колонки-V) – HappyTown

ответ

3
LEFT JOIN dbo.tblUsers usr ON recip.UserGUID = usr.UserGUID -- > gives me AssignedTo column 
LEFT JOIN dbo.tblUsers usr1 ON usr1.UserGuid = entri.UserGUID--gives me AssignedBy column 

В столбце UserGUID ссылок 2 dbo.tblUsers таблицы коррелируются с использованием различных столбцов (recip.UserGUID и entri.UserGUID), поэтому различные строки из dbo.tblUsers могут быть возвращены.

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