2012-01-02 4 views
0

я это оставило присоединиться запросом, чтобы показать все объявления о работе сотрудников, которые в asigned группы конкретного руководителя, он прекрасно работаетmysql left join and union?

SELECT * 
FROM jobs j 
LEFT JOIN groups g ON g.group_number = j.relevant_group 
WHERE j.relevant_group = 0 
OR (g.supervisor_id = j.job_lister_id AND g.employee_id = '$myVar') 

Но теперь мне нужно добавить в выборе, так что проводка супервизор тоже может это увидеть, я установил $ myVar для хранения идентификатора сеанса просмотра. Я попробовал этот

SELECT * 
FROM jobs j 
LEFT JOIN groups g ON g.group_number = j.relevant_group 
WHERE j.relevant_group = 0 
OR (g.supervisor_id = j.job_lister_id AND g.employee_id = '$myVar') 
OR (j.job_lister_id = '$myVar') 

Но когда руководитель входит в систему он видит список отправил несколько раз (количество дублирования всегда равно числу людей в группе) , как это исправить?

ответ

1

Нужны ли вам какие-либо поля из groups, чтобы быть в результирующем наборе? Потому что кажется, что вы просто используете groups, чтобы определить, какие jobs записей для возврата? Если это так, то вам, вероятно, следует отказаться от JOIN и использовать вместо этого подзапрос. Например, вы можете написать:

SELECT * 
    FROM jobs j 
WHERE j.job_lister_id = '$myVar' 
    OR j.relevant_group = 0 
    OR EXISTS 
     (SELECT 1 
      FROM groups g 
      WHERE g.group_number = j.relevant_group 
      AND g.supervisor_id = j.job_lister_id 
      AND g.employee_id = '$myVar' 
     ) 
; 
+0

Да, я думаю, что ваш подход намного лучше. спасибо –

+0

@FredTurner: Добро пожаловать! – ruakh