我有三张table
- project(id,user_id,project_name)
- project_roles(id,user_id,project_id)
- users(id,nickname)
我想获取所有项目的用户id为1,我也想得到项目,其中这个用户有记录的项目_roles
因此,如果用户有项目A和B,而这个用户在project_roles中有项目C的行,我想获取项目A、B和C
我试过这个:
SELECT *
from project
WHERE user_id = 1
OR (project.id = project_roles.project_id WHERE project_roles.user_id = 1)
示例数据:
用户表
- id:1,昵称:'测试'
PROJECTS表 - ID:7777,user_id:2、项目名称:“名称1”
- ID:8888,user_id:1、项目名称:'NAME2'
- ID:9999,用户ID:1、项目名称:'NAME3'
PROJECT_ROLES表 - id:5,user_id:1、项目ID:'7777'
我想为user 1获取所有3个项目,因为id为8888和9999的项目具有user_id:1,并且有project_roles数据,其中user_id为1,因此我也想获取项目7777
4条答案
按热度按时间91zkwejq1#
谢谢大家帮助我。
这是对我有用的答案。
vsmadaxz2#
尝试复制示例数据,它与您提供的有点不同,但上下文是相同的。
Schema(MySQL v8.0)
查询#1
js5cn81o3#
你应该使用set运算符
union
来实现:如果用户位于
PROJECTS
表和PROJECT_ROLES
表中,则集合运算符UNION
将删除重复项。chhqkbe14#
如果用户拥有项目A和B,且此用户在project_roles中拥有项目C行,则我希望获取项目A、B和C
第一个查询(在UNION之上)返回项目表中的项目。这很简单。
第二个查询返回project_roles中的项目,这些项目不在该用户的project中。还返回项目名称。这假定projects表不为空,并且project_roles中存在的每个项目至少有一条记录。