2015-02-07 4 views
0

Это пинал мой зад ...Показать результат в зависимости от значения другой таблицы

Так что я таблица работы:

id | date  | time 
1 | 02-10-2015 | 8:00 
2 | 02-11-2015 | 8:00 
3 | 02-12-2015 | 8:00 
4 | 02-13-2015 | 8:00 

Затем пользователя:

id | name 
1 | John 
2 | Mary 
3 | Darius 

И наконец, многие из многих пользователей_job

id | user_id | job_id | status 
1 | 1  | 1 | canceled 
2 | 2  | 1 | active 
3 | 3  | 3 | active 
4 | 2  | 4 | canceled 

Я пытаюсь запустить запрос, в котором он вернет отмененный только, когда другого человека не назначили.

Таким образом, в случае данных, представленных выше, было бы только вернуть работу 4, потому что работа 1 имеет кто-то активный назначен

SELECT 
     user_job.user_id, 
     job.id as job_id, 
     user_job.status 
FROM job inner JOIN user_job ON (job.id = user_job.job_id) 
WHERE homekeeper_jobs.state != 'active' 

возвращается:

user_id | job_id | status 
    1  | 1 | canceled 
    2  | 4 | canceled 

Поскольку работа 1 имеет другого пользователя присвоенный «активным» статусом, я бы не хотел его показывать.

Большое спасибо.

ответ

1

Использование подзапроса

SELECT * FROM user_job 
WHERE status = 'canceled' AND job_id NOT IN 
(SELECT job_id FROM user_job WHERE status='active') 
1

Используйте Not exists оператора для фильтрации active записей. Попробуй это.

SELECT * 
FROM user_job u 
     JOIN (SELECT j.id AS job_id 
      FROM job j 
      WHERE NOT EXISTS (SELECT 1 
           FROM user_job uj 
           WHERE j.id = uj.job_id 
             AND uj.status = 'active')) a 
     ON a.job_id = u.job_id 
Смежные вопросы