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

作業するスキーマのコピーがないと、正確に判断するのは困難ですがbooking、 andbookingstatusLEFT JOINs に変更したときに、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 であったレコードを削除しませんか?

于 2010-08-10T09:07:24.673 に答える
0

結合が 0 の一致を返す可能性があるテーブルには、LEFT OUTER JOIN を試してください。例:- あなたの場合、 b と bs に LEFT OUTER JOIN があり、チェックします

于 2010-08-10T09:07:46.387 に答える