SQL:努力从多对多关系中加入3个表

时间:2016-07-19 12:10:43

标签: sql-server join

我有3张桌子:

Users - Username
Procedures - SeriesNum,ProcNum (Composite PKey),Description,CurrentRev
UsersProcedures - Username,SeriesNum,ProcNum,RevTrained,LevelTrained,DateTrained

我将如何查询,以便为每个用户显示所有过程,以及是否在这些过程中训练了用户过程表中的值(如果他们未经过培训,那么这些值将会到来因为它们不存在而为空。

我最接近的是这个查询:

SELECT Procedures.SeriesNum,Procedures.ProcNum,Description,CurrentRev,RevTrained,LevelTrained,DateTrained,Users.Username
FROM Procedures,Users
LEFT JOIN UsersProcedures ON UsersProcedures.Username = Users.Username

然而,这并不完全有效,因为它从UsersProcedures表中提取的值对于每个过程都是相同的,而不是每个过程都是唯一的。

1 个答案:

答案 0 :(得分:2)

-- select whatever columns you like
SELECT p.*, u*, pu.*
-- a cross join conmbines all rows from both tables 
FROM Procedures p 
CROSS JOIN Users u
-- add the exp to the mix 
LEFT JOIN UsersProcedures pu 
    ON  pu.Username = u.Username 
    AND p.SeriesNum = pu.SeriesNum  
    AND p.ProcNum = pu.ProcNum