Запрашивая значение счетчика, имеющего () - PullRequest
2 голосов
/ 10 августа 2010

У меня проблемы с запросом, который отображает записи в соответствии с их частотой заполнения.

Например, вакансия не может быть забронирована или не зарезервирована.Если у вакансии есть заказы, они могут быть в форме 'active [1]', 'pending [0]'.Запрос, который я написал до сих пор, работает, если у вакансии есть записи бронирования, но я не могу заставить ее работать, если у нее нет записей бронирования.

Мой запрос (который работает) для вакансий с бронированием:следующим образом: -

SELECT v.*, j.job_category_name, bu.business_unit_name 
FROM vacancy v 
INNER JOIN job_category j ON j.job_category_id = v.job_category_id 
INNER JOIN business_unit bu ON bu.business_unit_id = v.business_unit_id 
INNER JOIN booking b ON b.vacancy_id = v.vacancy_id 
INNER JOIN booking_status bs ON bs.id = b.booking_status_id 
WHERE 
    v.vacancy_status <> 'revoked' AND 
    v.vacancy_reference <> 'auto-generated booking' AND 
    v.business_unit_id IN (series of primary keys) AND 
(bs.booking_status_type_id = 1 OR bs.booking_status_type_id = 2) 
GROUP BY v.vacancy_id 
HAVING v.vacancy_limit > count(b.booking_id)
ORDER BY v.vacancy_id DESC 

Я думал, что изменение соединения b и bs на LEFT JOIN сработало бы, но это не сработало.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

Попробуйте LEFT OUTER JOIN для таблиц, для которых объединения могут вернуть 0 совпадений. Например: - в вашем случае используйте LEFT OUTER JOIN для b и bs и отметьте

0 голосов
/ 10 августа 2010

Без копии вашей схемы, с которой трудно работать, сложно сказать точно, но когда вы изменили booking и bookingstatus на LEFT JOIN s, вы также изменили предложение WHERE, чтобы оно читало что-тонапример:

WHERE 
  v.vacancy_status <> 'revoked' AND 
  v.vacancy_reference <> 'auto-generated booking' AND 
  v.business_unit_id IN (series of primary keys) AND 
  (ISNULL(bs.booking_status_type_id, 1) = 1 OR ISNULL(bs.booking_status_type_id, 2) = 2) 

т.е. гарантировано, что будет выполнено полное предложение WHERE, не удаляя при этом записи, в которых все значения для столбцов из booking и bookingstatus равны NULL?

...