JOIN仅适用于一个表格?

时间:2015-11-10 21:01:46

标签: sql sql-server

我正在尝试从三个表编译用户项目权限。我想出了下面的SQL代码:

SELECT U.UserName,
       G.Name,
       (SELECT PROJ.Name
        FROM [test 2].dbo.Projects as PROJ
        WHERE PROJ.ProjectID = PERM.ProjectID) AS Project

FROM [test 2].dbo.tbl_Sp_Users AS U
JOIN [test 2].dbo.tbl_Sp_UserGrps AS G
ON U.DefGroupID=G.ID

JOIN [test 2].dbo.tbl_ss_Permission_Project AS PERM
ON U.ID = PERM.UserID

ORDER BY U.UserName ASC;  

在我看来,JOIN的工作方式是选择一个表并将其链接到其他表。但是如果我的主表没有直接链接,我还需要做什么?我在第三栏中使用SELECT语句绕过它。这是最好的方法吗?

最后,另一个相关的简单问题。我如何按第三列排序?它不会让我ORDER BY 项目这是我拥有该列的别名。

2 个答案:

答案 0 :(得分:1)

看起来你想要LEFT JOIN。 左连接与普通(INNER)连接执行相同的操作,但如果没有匹配,它仍将引入父记录。

试试这个:

['uvwxyz', 'abcdef']

答案 1 :(得分:0)

SELECT U.UserName,
       G.Name,
        PROJ.Name
FROM [test 2].dbo.tbl_Sp_Users AS U
JOIN [test 2].dbo.tbl_Sp_UserGrps AS G
    ON U.DefGroupID=G.ID
JOIN [test 2].dbo.tbl_ss_Permission_Project AS PERM
    ON U.ID = PERM.UserID
LEFT JOIN [test 2].dbo.Projects AS PROJ 
    ON  PROJ.ProjectID = PERM.ProjectID
ORDER BY U.UserName ASC;