簡體   English   中英

JOIN僅適用於一張桌子嗎?

[英]JOIN applies to only one table?

我正在嘗試從三個表中編譯用戶項目權限。 我想出了下面的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 Project ,這是我擁有該列的別名。

看起來您想要左加入。 左聯接與普通(INNER)聯接具有相同的功能,但是如果沒有匹配項,它將仍然拉入父記錄。

嘗試這個:

SELECT 
  U.UserName
 ,G.Name
 ,proj.name
FROM
  [test 2].dbo.tbl_Sp_Users U
  inner JOIN [test 2].dbo.tbl_Sp_UserGrps G ON U.DefGroupID=G.ID
  inner JOIN [test 2].dbo.tbl_ss_Permission_Project PERM ON U.ID = PERM.UserID
  left join [test_2].dbo.Projects proj ON proj.projectid = PERM.projectid
ORDER BY
  U.UserName ASC;  
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;  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM