我有以下查询,我用它来根据software_id和级别过滤行。 我已经把条件放在ON-Clause中,因为我仍然希望返回行,JobadvertsSoftware表中没有相应的行。将条件与AND合并到Mysql 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`
问题是,它还返回JobadvertsSoftware行,其中级别是例如, 2 同样,如果我将它放在WHERE子句中,它将过滤掉没有JobadvertsSoftware不应该执行的行。 如何告诉MySQL返回Jobadvert的所有行,其中给定的software_id和级别匹配或为NULL?
如果您使用INNER JOIN而不是OUTER JOIN,那会给你想要的吗? – Melanie 2013-03-14 14:38:55
建议使用较短的别名 – ldgorman 2013-03-14 14:39:28
在您的WHERE子句中放置“level” – ldgorman 2013-03-14 14:40:54