2014-11-07 2 views
0

Мне нужно получить отдельное имя_проекта, в котором каждый рабочий_ид и их supervisor_id работал для одного и того же проекта. Я знаю, что ответ - bb, dd и ee, но не знаю запроса, чтобы получить это. Вот мой запрос в данный момент:MYSQL Присоединиться к запросу трех таблиц

SELECT project.project_name, worker.supervisor_id, projectworker.worker_id 
FROM project JOIN projectworker 
on project.project_id = projectworker.project_id 
JOIN worker 
on worker.worker_id = projectworker.worker_id 
order by project_name; 

получает:

project_name | supervisor_id | worker_id 
aa     4   1 
aa     4   1 
aa     4   2 
aa     4   3 
bb     12   5 
bb     NULL  12 
dd     4   3 
dd     4   6 
dd     3   7 
dd     4   3 
ee     NULL  12 
ee     4   1 
ee     2   8 
ee     1   9 
ee     9   10 
+0

'ВЫБОР project.project_name, worker.supervisor_id, projectworker.worker_id' ---->' SELECT DISTINCT (project.project_name) ', нет никакого смысла держать' worker.supervisor_id, когда projectworker.worker_id' вы хотите только проекты. – alkis

+0

Да, но просто хочу проиллюстрировать возникшую проблему. –

ответ

1

Вот один из способов сделать это.

SELECT project.project_name 

FROM project 

     JOIN projectworker 
     on project.project_id = projectworker.project_id 

     JOIN worker 
     on worker.worker_id = projectworker.worker_id 

WHERE EXISTS (SELECT 1 
       FROM projectworker 
       WHERE project_id = project.project_id AND worker_id = worker.supervisor_id) 

GROUP BY project.project_name 

ORDER BY project_name; 
+0

Я знал, что подзапрос будет полезен, спасибо :) –

0

Попробуйте это:

SELECT distinct project.project_name, worker.supervisor_id, projectworker.worker_id 
FROM project JOIN projectworker 
on project.project_id = projectworker.project_id 
JOIN worker 
on worker.worker_id = projectworker.worker_id 
where worker.project_id = projectworker.project_id 
order by project_name; 
+0

Нет рабочего_проекта в таблице рабочего стола –

+0

Или вы можете использовать employee.project_name = projectworker.project_name, если имя_проекта присутствует в обеих этих таблицах. –

+0

project.project_id = projectworker.project_id ваш вопрос имеет project_id в таблице рабочего стола. Что ты имеешь в виду? можете ли вы опубликовать полный дизайн стола? – TheProvost

Смежные вопросы