2011-06-01 41 views
3

我有兩個表。一個人有一個鏈接列表,另一個人擁有他們的風格,如果有的話。 後者是一個稀疏表,即它們的值爲空時沒有對應的行。 我運行以下查詢:sql服務器 - 加入空值

select hl.*, hls.colorCode, hls.bold 
from HeaderLinks hl, HeaderLinkStyles hls 
where hl.LinkId = hls.linkID 
order by row asc, [column] asc 

我想修改該這樣,如果行不針對特定的記錄存在,這些列將在結果集接收空值。

謝謝!

+1

獲取有關視覺連接的更多信息:http://stackoverflow.com/questions/3308122/how-do-i-decide-when-to-use-right-joins-left-joins-or-inner-joins -or-how-to-dete/3308153#3308153-我已經粘貼了我的答案 – 2011-06-01 09:04:25

+0

@Pranay Rana - 謝謝! – 2011-06-01 09:07:44

+0

停止使用隱式連接。他們的編程習慣很差,並於1992年被解僱! – HLGEM 2011-06-01 18:10:19

回答

4

Left Join

Select hl.*, hls.colorCode, hls.bold 
From HeaderLinks hl 
Left Join HeaderLinkStyles hls on hl.LinkId = hls.linkID 
order by row asc,[column] ASC 
+0

謝謝!我有一段時間沒有使用連接,我應該重新知道:) – 2011-06-01 09:01:11

+0

很高興幫助您:) – Pankaj 2011-06-01 09:02:03

+2

@Elad Lachmi,您不應該編寫不使用顯式連接的查詢。隱式聯接更難以維護,並且由於易於創建偶然交叉聯接而導致更多的錯誤。 Ther不能再次編寫隱式聯接。他們只是一個糟糕的編程習慣,就像使用Go To一樣。 – HLGEM 2011-06-01 18:13:31

0

您需要使用左外連接

select hl.*, hls.colorCode, hls.bold 
from HeaderLinks hl 
    left join HeaderLinkStyles hls on 
     hl.LinkId = hls.linkID 
order by row asc, [column] asc 

Using Outer Joins

0

您需要使用LEFT JOIN

Select 
    hl.*, 
    hls.colorCode, 
    hls.bold 
from 
    HeaderLinks hl 
LEFT JOIN 
    HeaderLinkStyles hls on hl.LinkId = hls.linkID 
order by 
    row asc,[column] ASC 
1

要獲得NUL L用不存在的,你需要爲使用LEFT OUTER JOIN或RIGHT OUTER上表連接的記錄.......

Select hl.*, hls.colorCode, hls.bold From HeaderLinks hl 
Left Join HeaderLinkStyles hls on hl.LinkId = hls.linkID order by row asc,[column] ASC 

enter image description here

檢查連接在這裏:Visual Representation of SQL Joins

1

leftfull加盟將填補一排null時沒有找到匹配:

select * 
from HeaderLinks hl 
full outer join 
     HeaderLinkStyles hls 
on  hl.LinkId = hls.linkID 

左連接只填充右側表格,右側表格僅填充左側表格,而完全連接填充兩者。有關視覺插圖,請參閱A Visual Explanation of SQL Joins