查询计数值有()

时间:2010-08-10 09:03:23

标签: count left-join inner-join having-clause

我在查询时遇到困难,根据填充率显示记录。

例如,空缺可能没有预订或某些预订。如果空缺有预订,则可以采用“有效[1]”,“等待[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 :(得分:0)

如果没有可供使用的架构副本,则很难确切地说出来,但是当您将bookingbookingstatus更改为LEFT JOIN时,您是否也修改了{{1 }}子句,使其读取如下内容:

WHERE

即。确保满足完整的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) booking中列的所有值都为NULL的记录?

答案 1 :(得分:0)

对于连接可能返回0匹配的表,请尝试LEFT OUTER JOIN。 例如: - 在你的情况下,b和bs有LEFT OUTER JOIN并检查