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
添加到答案中@马丁纳达梅克