2013-09-30 80 views
0

我想知道如果你可以帮助 - 我有一个SQL查询(SQLServer),我已经创建,虽然一些结果没有被显示,我认为它由于NULL一些连接的结果。例如,我知道一些连接将使用NULL结果,因为100.resp_unit_no可能是NULL,也可能是100.employee_no。SQL查询结果中连接有NULL结果

查询到目前为止是:

select 
058.DESCRIPTION "IRU", 
111.job_ref "Job Reference", 
117.DESCRIPTION "Status", 
108.STATUS "Fixed?", 
105.DESCRIPTION "Job Type", 
111.POSTCODE "Postcode", 
111.site_id "Site ID", 
108.CONTRACT_START "Contract Earliest", 
108.CONTRACT_COMPLETION "Contract Latest", 
108.BOOKED_DURATION "Planned Duration (mins)", 
111.IMPORTANCE "Importance", 
111.CUSTOMER_NAME "Customer Name", 
100.expected_start "Expected Start", 
100.expected_end "Expected End", 
210.NAME "Employee", 
111.ON_HOLD "On Hold?" 
FROM 
111_JOBS 111, 
108_JOB_DETAILS 108, 
058_RESPONSIBILITY_UNITS 058, 
100_ACTIVITIES 100, 
105_ACTIVITY_TYPES 105, 
210_EMPLOYEES 210, 
117_STATUS_DESCRIPTIONS 117 
where 111.JOB_NO=108.JOB_NO 
AND 111.JOB_NO=100.JOB_NO 
AND 100.RESP_UNIT_NO=058.RESP_UNIT_NO 
AND 111.JOB_TYPE=105.ACTIVITY_TYPE 
AND 210.EMPLOYEE_NO=100.EMPLOYEE_NO 
AND 117.STATUS=100.ACTIVITY_STATUS 
order by IRU, Employee, EXPECTED_START; 

我想我需要一个右外连接,但我不能完全得到结构正确...

任何帮助将不胜感激!

+1

请勿使用数字作为别名!并阅读有关连接和正确的连接语法:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html您的查询是否运行? – fancyPants

+0

它运行 - 除了employee_no和resp_unit_no为空之外的结果回来。 我确实在数字前面有字符 - 它只是我的公司名称,我不想发送该字符:) –

回答

0

如果您更改查询以使用ANSI-92显式连接语法而不是您正在使用的ANSI-89语法(即,名称建议超过20年过期),那么您的查询将变得更容易操作:

SELECT 058.DESCRIPTION "IRU", 
     111.job_ref "Job Reference", 
     117.DESCRIPTION "Status", 
     108.STATUS "Fixed?", 
     105.DESCRIPTION "Job Type", 
     111.POSTCODE "Postcode", 
     111.site_id "Site ID", 
     108.CONTRACT_START "Contract Earliest", 
     108.CONTRACT_COMPLETION "Contract Latest", 
     108.BOOKED_DURATION "Planned Duration (mins)", 
     111.IMPORTANCE "Importance", 
     111.CUSTOMER_NAME "Customer Name", 
     100.expected_start "Expected Start", 
     100.expected_end "Expected End", 
     210.NAME "Employee", 
     111.ON_HOLD "On Hold?" 
FROM 111_JOBS 111 
     INNER JOIN 108_JOB_DETAILS 108 
      ON 111.JOB_NO = 108.JOB_NO 
     INNER JOIN 100_ACTIVITIES 100 
      ON 111.JOB_NO = 100.JOB_NO 
     LEFT JOIN 058_RESPONSIBILITY_UNITS 058   
      100.RESP_UNIT_NO = 058.RESP_UNIT_NO 
     LEFT JOIN 105_ACTIVITY_TYPES 105 
      ON 111.JOB_TYPE = 105.ACTIVITY_TYPE 
     LEFT JOIN 210_EMPLOYEES 210 
      ON 210.EMPLOYEE_NO = 100.EMPLOYEE_NO 
     LEFT JOIN 117_STATUS_DESCRIPTIONS 117 
      ON 117.STATUS = 100.ACTIVITY_STATUS 
ORDER BY IRU, Employee, EXPECTED_START; 

现在不知道哪些列可能是空的,我不知道它连接到改变从INNERLEFT,所以我只换了几个人​​,但你应该能够根据需要更改一些。

Aaron Bertrand已经写了good article,有更多理由切换到较新的连接语法。

+0

这是一个COBOL程序转换为SQL Server数据库?自从Y2K以来,我在变量的开头没有看到数字!就个人而言,我喜欢将诸如JOBDET之类的别名保留为[Job_Details]。数字很​​难记住。 –

+0

我认为这是伪代码,对这个问题的评论似乎表明部分表名和别名已被删除。我同意难以记住,但可能有一个很好的理由(虽然我想不出一个) – GarethD

+0

感谢加雷斯 - 你的更新排序它..我以前用过,但我只是不能'当我被教导旧时尚的方式时,不要让我的头在周围,但我需要更新。 是的,我删除了别名,因为我们有一切都带有我不想发布的公司ID的前缀。只是做了一个搜索/替换:) –