我正在尝试从三个表编译用户项目权限。我想出了下面的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
项目这是我拥有该列的别名。
答案 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;