我有一个不是由我编写的存储过程。
我无法理解他们如何两次加入同一个表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
另外,我是否必须使用JOIN
中的所有表来接收结果?
答案 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.UserGUID
和entri.UserGUID
)进行关联,因此可能会返回dbo.tblUsers
的不同行。