LEFT JOIN未显示空值[重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

即使没有使用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值)。

mysql sql
3个回答
3
投票

你需要将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值不匹配。


3
投票

where子句与ON子句放在一起:

SELECT . . .
FROM `projects` LEFT JOIN 
      `jobs` 
      ON `projects`.`id` = `jobs`.`project_id` AND 
         `jobs`.`active` = 0
WHERE `projects`.`company_id` = 29;

2
投票

删除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条件使它成为内连接

© www.soinside.com 2019 - 2024. All rights reserved.