MySQL过滤
有一个MySQL过滤,mysql,join,filter,Mysql,Join,Filter,有一个用户表: user_id name ... ... project_id created_by title ... ... ... 然后是项目表格: user_id name ... ... project_id created_by title ... ... ... 和project\u users表(将用户连接到项目)
用户表:
user_id name
... ...
project_id created_by title
... ... ...
然后是项目
表格:
user_id name
... ...
project_id created_by title
... ... ...
和project\u users
表(将用户连接到项目):
而SQL:
SELECT
projects.id
FROM
projects
INNER JOIN project_users
ON project_users.project_id = projects.id
AND project_users.user_id = 10
这将选择所有附加了user\u id=10的用户的项目。
问题是,我如何选择那些附加了user\u id=10
的用户并且由user\u id=10
的用户创建的项目(通过projects.created\u by
列)
因此,如果这里提到的第一个SQL将返回5个项目,除非用户附加到他创建的项目,否则将返回6个或更多的项目(如果他确实创建了任何项目)。如果要将所有项目分配给他创建的用户10多个项目,则需要使用OR,而不是AND。如果用户/项目连接不是为项目作者建立的,则还需要使用左连接
我可能会这样做:
SELECT
DISTINCT projects.id
FROM
projects
LEFT JOIN project_users
ON project_users.project_id = projects.id
WHERE project_users.user_id = 10 OR project.created_by = 10
如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果尚未执行此操作,请提供与步骤1中提供的信息相对应的所需结果集。基本上,您将连接的和放在WHERE
语句中,并添加额外的或?当用户被分配到项目并创建项目时,此操作将返回项目两次。编辑:添加分组依据
解决了此问题。让我检查一下真实情况。我需要将它们分组为WHERE(project\u users.user\u id=10或project.created\u by=1)和…
,以防有额外的过滤器。请将DISTINCT
或groupby
添加到答案中@马丁纳达梅克