在2个连接表上使用OR条件的SQL查询

时间:2014-07-24 04:02:05

标签: sql postgresql union

我有一个projects表,一个users表,一个write_permissions表和一个read_permissions表。 read_permissionswrite_permissions都有2列:project_iduser_id(这是一个特意设计的示例,我不是在寻找替代表设置)。

我需要给定用户查找他具有写入权限或读取权限的所有项目。

例如,对于对项目A和B具有写权限的用户,以及仅对项目C具有读权限,对项目D没有权限的用户,我需要编写一个返回项目A,B和C的查询。

查询可能需要采用其他JOIN子句。例如,我可能有一个categories表和一个projects_categories表,列projects_iduser_id,并且可能想要查找用户具有写权限的所有项目和读取权限,属于给定的类别。

2 个答案:

答案 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

这将为您提供用户对具有读取或写入权限的项目 现在你可以使用它的结果