这个问题在这里已有答案:
即使没有使用LEFT JOIN的活动作业,我也试图显示项目,但它似乎不起作用。我怀疑这是一个明显的错误所以请帮忙:
SELECT
`projects`.`id` AS `project_id`,
`projects`.`name` AS `project_name`,
`jobs`.`id` AS `job_id`,
`jobs`.`title` AS `job_title`,
`jobs`.`description` AS `job_description`
FROM
`projects`
LEFT JOIN `jobs` ON `projects`.`id` = `jobs`.`project_id`
WHERE
`projects`.`company_id` = 29
AND `jobs`.`active` = 0
ORDER BY
`projects`.`name`,
`jobs`.`title` asc
SQLFiddle:http://sqlfiddle.com/#!9/305373/1
期望的结果将是包含这些项目的列表而没有匹配的工作(因此使用null
值)。
你需要将where
上的jobs
条件移动到on
:
SELECT . . .
FROM `projects` LEFT JOIN
`jobs`
ON `projects`.`id` = `jobs`.`project_id` AND
`jobs`.`active` = 0
WHERE `projects`.`company_id` = 29
jobs
.active
上的比较将外连接转换为内连接,因为NULL
值不匹配。
将where
子句与ON
子句放在一起:
SELECT . . .
FROM `projects` LEFT JOIN
`jobs`
ON `projects`.`id` = `jobs`.`project_id` AND
`jobs`.`active` = 0
WHERE `projects`.`company_id` = 29;
删除jobs.activve=0
从哪里把它加入条件
SELECT
`projects`.`id` AS `project_id`,
`projects`.`name` AS `project_name`,
`jobs`.`id` AS `job_id`,
`jobs`.`title` AS `job_title`,
`jobs`.`description` AS `job_description`
FROM
`projects`
LEFT JOIN `jobs` ON `projects`.`id` = `jobs`.`project_id` and job.active=0
WHERE
`projects`.`company_id` = 29
ORDER BY
`projects`.`name`,
`jobs`.`title` asc
导致你的where条件使它成为内连接