I have three tables
I want to fetch all projects for user that has id 1 and I also want to get projects where this user has record in project_roles
So, if user has project A and B and this user has row in project_roles for project C, I want to fetch projects A, B and C
I tried this:
SELECT *
from project
WHERE user_id = 1
OR (project.id = project_roles.project_id WHERE project_roles.user_id = 1)
example data:
USERS TABLE
PROJECTS table
PROJECT_ROLES table
I want to fetch all 3 projects for user 1 because projects with id 8888 and 9999 has user_id: 1 and there is project_roles data where user_id is 1 so I want to get project 7777 also
Tried to replicate sample data, its a bit different than what you have provided but the context is the same.
Schema (MySQL v8.0)
CREATE TABLE project
(
id INT,
project_name VARCHAR(512),
user_id INT
);
INSERT INTO project (id, project_name, user_id) VALUES ('1', 'A', '23');
INSERT INTO project (id, project_name, user_id) VALUES ('2', 'B', '42');
INSERT INTO project (id, project_name, user_id) VALUES ('4', 'D', '23');
INSERT INTO project (id, project_name, user_id) VALUES ('1', 'A', '19');
INSERT INTO project (id, project_name, user_id) VALUES ('3', 'C', '15');
INSERT INTO project (id, project_name, user_id) VALUES ('3', 'C', '29');
INSERT INTO project (id, project_name, user_id) VALUES ('2', 'B', '19');
INSERT INTO project (id, project_name, user_id) VALUES ('3', 'C', '19');
CREATE TABLE project_roles
(
id INT,
project_id VARCHAR(512),
user_id INT
);
INSERT INTO project_roles (id, project_id, user_id) VALUES ('1', '1', '23');
INSERT INTO project_roles (id, project_id, user_id) VALUES ('2', '2', '42');
INSERT INTO project_roles (id, project_id, user_id) VALUES ('3', '4', '23');
INSERT INTO project_roles (id, project_id, user_id) VALUES ('4', '1', '19');
INSERT INTO project_roles (id, project_id, user_id) VALUES ('5', '3', '15');
INSERT INTO project_roles (id, project_id, user_id) VALUES ('6', '3', '29');
INSERT INTO project_roles (id, project_id, user_id) VALUES ('7', '2', '19');
INSERT INTO project_roles (id, project_id, user_id) VALUES ('8', '3', '19');
CREATE TABLE users
(
id INT,
nickname VARCHAR(512)
);
INSERT INTO users (id, nickname) VALUES ('23', 'John');
INSERT INTO users (id, nickname) VALUES ('42', 'Doe');
INSERT INTO users (id, nickname) VALUES ('19', 'James');
INSERT INTO users (id, nickname) VALUES ('15', 'Mark');
INSERT INTO users (id, nickname) VALUES ('29', 'Peter');
Query #1
SELECT distinct U.id, U.nickname, PR.project_id, P.project_Name FROM users U
INNER JOIN project_roles PR ON PR.user_id = U.id
INNER JOIN project P ON P.id = PR.project_id
where U.id = 19;
id | nickname | project_id | project_Name |
---|---|---|---|
19 | James | 1 | A |
19 | James | 2 | B |
19 | James | 3 | C |