为什么两次连接相同的表会返回不同的列值?

时间:2017-01-21 05:59:50

标签: sql-server tsql join

我有一个不是由我编写的存储过程。

我无法理解他们如何两次加入同一个表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中的所有表来接收结果?

1 个答案:

答案 0 :(得分: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

2个dbo.tblUsers表引用的UserGUID列使用不同的列(recip.UserGUIDentri.UserGUID)进行关联,因此可能会返回dbo.tblUsers的不同行。