我正在嘗試選擇該用戶有權訪問的所有頁面,無論是直接訪問還是組訪問。
我試過這個,但它沒有按預期回傳結果。
SELECT DISTINCT
pages.id AS page_id,
pages.name AS page_name,
pages.description AS page_description,
pages.type AS page_type,
group_page.group_id AS page_group_id,
user_page.user_id AS page_user_id
FROM
pages
JOIN
user_page ON pages.id = user_page.page_id
JOIN
group_page ON pages.id = group_page.page_id
JOIN
user_group ON group_page.group_id = user_group_.group_id
WHERE
user_page.user_id = 23
我在下面提供了帶有我的架構的示例資料:
頁表:
page_id | page_name | page_description
--------- ----------- ------------------
4 | name3 | descr
6 | name2 | description
5 | name8 | description
user_page 表:
user_id | page_id
------------ ----------
23 | 4
12 | 6
12 | 6
group_user 表:
user_id | group_id
----------- -----------
4 | 14
4 | 16
23 | 16
group_page 表:
page_id | group_id
----------- -----------
4 | 14
6 | 16
在這里查看https://www.db-fiddle.com/f/6MnsujPF8forREq2Cwt8EDn/2
我正在嘗試為用戶 7 檢索第 4 頁
uj5u.com熱心網友回復:
我會去做這樣的事情,在那些 DISTINCT 子句上放輕松,它們通常是不好的做法。這在鏈接頁面上的測驗中效果很好
select
p.*
from pages p
inner join group_page gp on gp.page_id=p.page_id
inner join group_user gu on gu.group_id=gp.group_id
where gu.user_id = '7'
union
select
p.*
from
pages p
inner join
user_page up ON p.page_id = up.page_id
where up.user_id = '7'
uj5u.com熱心網友回復:
請注意,您的小提琴沒有 page_id 4,因此沒有回傳任何結果。我將 page_id 3 更新為 page_id 4。
我加入 group_user 和 group_page,以便我可以選擇 user_id 和 page_id(組訪問),然后將它們與 user_page 表中的 user_id 和 page_id 聯合(直接訪問)。UNION 應該回傳不同的記錄。
然后我將此結果加入到帶有 WHERE user_id = 7 的 pages 表中。
https://www.db-fiddle.com/f/3vqKF2amyFcPvzaFP8hD68/1
select p.*
from pages p
join (
select up.user_id, up.page_id
from user_page up
UNION
select gu.user_id, gp.page_id
from group_user gu
join group_page gp on (gu.group_id = gp.group_id)
) ids on (p.page_id = ids.page_id)
where ids.user_id = 7
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/337168.html
下一篇:KQL:加入表后合并2列
