2017-07-27 54 views
0

我正在執行與此SO線程非常相似的操作(link)。不同之處在於我的表有時有空值。下面是我提供的鏈接後面的插圖。SQL:當存在空值時,將整數替換爲字符串

1)表「人」包含的人名單與自己喜歡的運動

ID | Name | FavSport | DislikeSport 
------------------------------------ 
1 | Bob | 1  |  5 
2 | Roy | 3  |  4 
3 | Sarah |   |  
4 | Kevin | 2  |  
5 | Mary |   |  3 

2)表「運動」,展示了體育

ID | Sport  
--------------- 
1 | Football 
2 | Basketball 
3 | Volleyball 
4 | Soccer  
5 | Badminton 

查詢我得到的名單從鏈接我張貼在這個線程

select people.Name, sports.Sport 
from people, sports 
where people.FavSport = sports.ID 

3)結果,如果查詢類似像上面

Name | Sport  | Dislike 
---------------------------- 
Bob | Football | Badminton 
Roy | Volleyball | Soccer  
Sarah | Football | Football 
Kevin | Basketball | Football 
Mary | Football | Volleyball 

4)我要的是空像下面(或類似的任何默認值:無)

Name | Sport  | Dislike 
---------------------------- 
Bob | Football | Badminton 
Roy | Volleyball | Soccer  
Sarah |   | 
Kevin | Basketball | 
Mary |   | Volleyball 

任何人都怎麼處理這個問題?提前致謝。

回答

2

你需要一個外部聯接

select people.Name, 
     likes.Sport as FavSport , 
     dislikes.Sport as DislikeSport 
from people 
left join sports likes 
on people.FavSport = likes.ID 
left join sports dislikes 
on people.DislikeSport = dislikes.ID 

標準文檔爲JOIN

+0

我的情況實際上是百姓餐桌也有「不喜歡運動」,「FavSport」也使用運動桌子的對面。你知道我該如何加入嗎? – Tan

+0

@譚 - 你可以在問題,表結構以及樣本數據中發佈。 –

+0

上面編輯的那個,就像我的數據庫那樣更類似 – Tan

0

你需要做一個left outer join

select people.Name, sports.Sport 
    from people 
    left join sports on (people.FavSport = sports.ID); 
+0

我的情況實際上人民表也有'不喜歡體育','FavSport',也使用體育表的對面。你知道我該如何加入嗎? – Tan

+0

只需再次加入。你必須給兩個版本的'sports'一個不同的別名,但除此之外它就像另一個表。 –

1
SELECT people.NAME, 
     Isnull(sport.sport, '') AS Sport 
FROM people 
     LEFT JOIN sport 
       ON favsport = sport.id 
+0

我編輯我的帖子,所以實際上我有兩個領域,最喜歡和不喜歡,他們兩個都從'運動'表採取了運動列表,你知道如何加入嗎? – Tan

+0

'NULL'和''''是_different。做適當的測試。 (或者測試兩者。) –