2

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

例如,空缺可以没有预订或一些预订。如果空缺有预订,它们可以是“活动 [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 会起作用,但它没有。

有任何想法吗?

4

2 回答 2

0

如果没有要使用的架构副本,很难准确判断,但是当您更改为bookings时,您是否还修改了您的子句,使其内容如下:bookingstatusLEFT JOINWHERE

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 子句,从而不删除列的所有值来自bookingbookingstatus为 NULL 的记录?

于 2010-08-10T09:07:24.673 回答
0

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

于 2010-08-10T09:07:46.387 回答