2013-03-07 28 views
0

我有一個用戶信息表和標籤信息表。標籤表基本上有一個TagType,一個UserID和一個標籤值。我基於UserID加入了兩個表。在連接表上進行篩選,但也包括已連接和篩選的表爲空的數據?

現在我想查詢所有用戶提供值的列表與TagType標籤= 1

SELECT [user].name, [tag].value 
FROM user LEFT OUTER JOIN 
    tag ON user.id = tag.userid 
WHERE [tag].type = 1 

到目前爲止,一切都很好。這很好。

我現在的問題是,我也希望看到用戶在我的查詢中沒有Tag Type = 1的標籤。在這種情況下,它應該只返回NULL。現在這些用戶不會被查詢返回。

如果我擺脫了'WHERE [tag] .id = 1',那麼它們會顯示出來,但它會爲每個用戶返回幾行 - 每個現有標籤類型一行 - 但我不希望這樣。

在某種意義上,我想:

Column 1: User Name 
Column 2: Tag value of Tag Type 1 if it exists, otherwise NULL 

我被困在那裏。我不知道如何讓其他用戶進入,但保留其他標籤類型。

回答

1

把你WHERE條件JOIN條件內。

SELECT [user].name, [tag].value 
FROM user LEFT OUTER JOIN 
    tag ON user.id = tag.userid and [tag].type = 1 
+0

非常感謝。奇蹟般有效!我希望是一件容易的事情。 – MarcoK 2013-03-07 18:29:53

+0

@MarcoK - 因爲你已經有了'LEFT JOIN'這個最合乎邏輯的解決方案。否則,你會需要像'CASE'子句。 – 2013-03-07 18:34:28

0

嘗試:

SELECT [user].name, [tag].value 
FROM user LEFT OUTER JOIN 
    tag ON user.id = tag.userid AND [tag].type = 1