加入三个不返回数据的表

时间:2013-04-09 16:31:05

标签: sql jointable

我知道我错过了一些东西而且我已经完成了我的研究,但它只是没有找到我,所以我想我会发布我的问题。

我有三个表(JobsPersonsOrgs)。 Jobs表格有org_surveyed_by_idperson_requestor_id。它们是外键,即它们分别等于Orgs.Org_idPersons.Person_id的值。

我正在尝试将这三个表链接在一起,并从人员表和组织表中获取信息。我可以加入一个,但是当我加入第二个时,我没有得到任何结果。

我做错了什么?

SELECT sj.JOB_NUMBER, sj.TITLe, sj.JOB_CATEGORY, 
       sj.PURPOSE, sj.ORG_SURVEYED_BY_ID, 
       sj.PERSON_REQUESTOR_ID, os.org_full_name
FROM SURVEY_JOBS sj
    JOIN organizations os ON sj.org_surveyed_by_id = os.org_id
    JOIN persons ps ON sj.person_requestor_id = ps.person_id
WHERE SURVEY_JOB_ID = :P30_SURVEY_JOB_ID 

第二次加入给我带来了麻烦。

1 个答案:

答案 0 :(得分:4)

您的JOIN似乎没问题,因此persons表上可能没有数据,person_requestor_id表上的SURVEY_JOBSNULL。尝试使用LEFT JOIN s:

SELECT  sj.JOB_NUMBER, 
        sj.TITLe, 
        sj.JOB_CATEGORY, 
        sj.PURPOSE, 
        sj.ORG_SURVEYED_BY_ID, 
        sj.PERSON_REQUESTOR_ID, 
        os.org_full_name,
        ps.SomeColumnHere
FROM SURVEY_JOBS sj
LEFT JOIN ORGANIZATIONS os 
    ON sj.org_surveyed_by_id = os.org_id
LEFT JOIN PERSONS ps 
    ON sj.person_requestor_id = ps.person_id
WHERE sj.SURVEY_JOB_ID = :P30_SURVEY_JOB_ID 

您仍然应该获得结果,如果不满足JOIN表的PERSONS条件,您将看到该表的列的NULL值。