Union
從單個表但從不同路徑獲取表數據
向 StackExchange 的所有專家致以問候。
我遇到的問題似乎很簡單,只是我對 SQL 的了解不足,無法做到這一點。
我有一個名為“ApplicationPlans”的表,其中包含有關我的每個應用程序中的計劃的數據。此表以 ApplicationId 作為外鍵連接到“應用程序”表。“應用程序”直接連接到“使用者角色”表一次,並通過“客戶”表連接一次。允許我們在應用程序級別和/或客戶端訪問級別上設置訪問級別。
我的目標是根據使用者的角色從“ApplicationPlans”表中獲取數據。由於此數據將在網格中,因此最好不要使用兩個選擇查詢的 UNION,例如 image
當然這是我的想法,你可能會說它具有相同的性能,我會這樣做。
這就是我的情況,感謝任何建議
為了清楚起見,我必須添加,我需要我的使用者可以訪問的“應用程序計劃”中的那些數據。這是通過首先找到該使用者的角色,然後分兩個階段來確定的:
- 找到該使用者有權訪問的客戶端,然後找到他們的應用程序,然後找到他們的 ApplicationPlan。
- 查找此使用者可以直接訪問的應用程序,然後查找他們擁有的 ApplicationPlans。
結果旨在將這兩個集合結合在一起。
不確定我是否理解問題所在,但您可以使用如下派生表:
select ur.id, c.scopeid from userroles ur left join clients c on ur.scopeid = c.id
然後將其與其餘表連接起來。就像是:
select ... from ( select ur.id, c.id as clientid, ... from userroles ur left join clients c on ur.scopeid = c.id ) dt join applications a on dt.id = a.id or dt.clientid = a.clientid join applicationplans ap on ap.applicationid = a.id
一般來說,DDL(創建表……等)比用於描述表的圖像更受歡迎。
好的,到目前為止,通過搜尋,我找到了一個答案,那就是一個表上的多個聯接,到目前為止,我編寫了這個查詢,這對我有用。
我想請版主編輯這個問題,以便為所有尋找此類簡單問題的 sql 初學者提供更好的指南!
我藉此機會感謝所有自願提供幫助的人。
SELECT DISTINCT [ApplicationPlans].[Id] ,[ApplicationPlans].[Code] ,[ApplicationPlans].[Name] ,[ApplicationPlans].[UnsubscribeCode] ,[ApplicationPlans].[ThumbnailUrl] ,[ApplicationPlans].[ApplicationId] ,[ApplicationPlans].[Type] ,[ApplicationPlans].[IsActive] ,[ApplicationPlans].[ActiveUntil] ,[ApplicationPlans].[Description] ,[ApplicationPlans].[Price] ,[ApplicationPlans].[HasSubscription] ,[ApplicationPlans].[ExpireDays] ,[ApplicationPlans].[HasDebt] ,[ApplicationPlans].[DebtTarget] ,[ApplicationPlans].[DebtDays] ,[ApplicationPlans].[DebtStepDays] ,[ApplicationPlans].[DebtSleepDays] ,[ApplicationPlans].[DebtFinePrice] ,[ApplicationPlans].[CreditAmount] FROM Clients INNER JOIN Applications ON Clients.Id = Applications.ClientId INNER JOIN ApplicationPlans ON Applications.Id = ApplicationPlans.ApplicationId INNER JOIN
UserRoles ON Clients.Id = UserRoles.ScopeId 或 Applications.Id = UserRoles.ScopeId
INNER JOIN (SELECT 3 as ScopeTypeId) AS ScopeSystem ON UserRoles.ScopeTypeId = ScopeSystem.ScopeTypeID WHERE UserRoles.UserId = @UserId