查询返回null如果任何子表具有空记录

时间:2015-08-21 07:32:53

标签: sql postgresql sqlexception

PostgreSQL的新手,在单个查询中获取父表和子表数据。问题是如果子表中的任何一个具有空记录,则整个查询返回null。

SELECT r.resume_id,
       r.resume_name,
       r.updation_date, 
       edu.education_id, 
       edu.title, 
       edu.institute,
       exp.experience_id, 
       exp.designation, 
       exp.company_name, 
       exp.start_date, 
       skill.skill_id, 
       skill.skill_name 
  FROM user_resume r, 
       user_education edu, 
       user_experience exp, 
       user_skill skill 
 WHERE edu.resume_id = r.resume_id AND 
       exp.resume_id = r.resume_id AND 
       skill.resume_id = r.resume_id AND 
       r.resume_id = 1592570

这是我的查询,在这种情况下,给定的简历在体验表中没有记录,结果它返回null,如果我删除带经验表的连接,则它返回记录。

更多在简历表中,我还有这些Boolean字段,如果子表(experience, education or skill table)没有相关记录,则为false。 education_missing, experience missing, skill missing等。

2 个答案:

答案 0 :(得分:1)

FROM user_resume r
    ,user_education edu
    ,user_experience exp
    ,user_skill skill

is左内连接 - 这是预期的行为......

FROM user_resume r
LEFT OUTER JOIN user_education edu on COLUMNS
LEFT OUTER JOIN user_experience exp on COLUMNS
LEFT OUTER JOIN user_skill skill on COLUMNS

代替

答案 1 :(得分:0)

这会奏效。 LEFT OUTER JOIN将从resume表中为您提供详细信息,子表中的列将显示NULL。

SELECT r.resume_id,
   r.resume_name,
   r.updation_date, 
   edu.education_id, 
   edu.title, 
   edu.institute,
   exp.experience_id, 
   exp.designation, 
   exp.company_name, 
   exp.start_date, 
   skill.skill_id, 
   skill.skill_name 
 FROM user_resume r 
  LEFT OUTER JOIN user_education edu ON r.resume_id = edu.resume_id
  LEFT OUTER JOIN user_experience exp ON r.resume_id = exp.resume_id
  LEFT OUTER JOIN user_skill skill  ON  r.resume_id = skill.resume_id 
 WHERE 
   r.resume_id = 1592570