我有一个projects
表,一个users
表,一个write_permissions
表和一个read_permissions
表。 read_permissions
和write_permissions
都有2列:project_id
和user_id
(这是一个特意设计的示例,我不是在寻找替代表设置)。
我需要给定用户查找他具有写入权限或读取权限的所有项目。
例如,对于对项目A和B具有写权限的用户,以及仅对项目C具有读权限,对项目D没有权限的用户,我需要编写一个返回项目A,B和C的查询。
查询可能需要采用其他JOIN子句。例如,我可能有一个categories
表和一个projects_categories
表,列projects_id
和user_id
,并且可能想要查找用户具有写权限的所有项目和读取权限,属于给定的类别。
答案 0 :(得分:2)
SELECT p.*
FROM (
SELECT project_id
FROM write_permissions
WHERE user_id = 1
UNION
SELECT project_id
FROM read_permissions
WHERE user_id = 1
) sub
JOIN projects p USING (project_id);
没有UNION
的 ALL
会自动在结果中折叠重复项。
答案 1 :(得分:0)
SELECT [project_id] FROM [read_permissions] WHERE [user_id]=@user_id
UNION ALL
SELECT [project_id] FROM [write_permissions] WHERE [user_id]=@user_id
这将为您提供用户对