我在查询时遇到困难,根据填充率显示记录。
例如,空缺可能没有预订或某些预订。如果空缺有预订,则可以采用“有效[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会起作用,但它没有。
有什么想法吗?
答案 0 :(得分:0)
如果没有可供使用的架构副本,则很难确切地说出来,但是当您将booking
和bookingstatus
更改为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并检查