次のクエリを使用して、software_id と level に基づいて行をフィルター処理します。JobadvertsSoftware テーブルに対応する行がない場合でも、行を返したいので、条件を ON 節に入れました。
SELECT `Jobadvert`.`id` FROM `jobadverts` AS `Jobadvert`
LEFT JOIN `users` AS `User` ON (`Jobadvert`.`user_id` = `User`.`id`)
LEFT JOIN `jobadverts_softwares` AS `JobadvertsSoftware_0` ON
(`Jobadvert`.`id` = 'JobadvertsSoftware_0.jobadvert_id' AND
(`JobadvertsSoftware_0`.`software_id` = '32' AND
`JobadvertsSoftware_0`.`level` IN ('1', 4)))
WHERE `Jobadvert`.`active` = 1 AND `User`.`premium` = '1' AND
Jobadvert`.`department_id` = (5)
GROUP BY `Jobadvert`.`id`
問題は、レベルがたとえば 2 である JobadvertsSoftware-rows も返すことです。これを WHERE 句に入れると、すべきでない JobadvertsSoftware がない行が除外されます。指定された software_id AND レベルが一致するか NULL である Jobadvert のすべての行を返すように MySQL に指示するにはどうすればよいですか?