MySQL оставил присоединиться и объединиться? - PullRequest
0 голосов
/ 02 января 2012

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

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 Ответ

1 голос
/ 02 января 2012

Вам действительно нужны поля из 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'
        )
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...