【发布时间】:2017-01-21 15:43:55
【问题描述】:
我有一个不是我编写的存储过程。
我无法理解他们如何两次加入同一个表 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 中的所有表格才能收到结果?
【问题讨论】:
-
在左边的桌子上保持一致
标签: sql-server tsql join