2013-09-30 121 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的前綴。只是做了一個搜索/替換:) –