2014-04-29 39 views
0

我想我不是以正確的方式提出問題,所以即使經過數小時的研究,我也找不到答案。所以我希望我能在這裏得到答案。外部加入2個表格並限制2列

Table1 
fragranceId, description, status 
1,   Floral,  Active 
2,   Musk,  Active 
3,   Fruity,  Active 

Table2 
fragranceId, contactId, value 
1,   1,   Love It 
2,   1,   Hate It 
3,   1,   NULL 

我可以結合2表的結果,並得到

fragranceId,使用ContactID,描述,狀態

但我紡紗我的車輪試圖讓它來限制值和使用ContactID同時展示那些沒有價值的香水。

IE: 
fragranceId, contactId, description, status, value 
1,   1,   Floral,  Active, Love It 
2,   1,   Musk,  Active, Hate It 
3,   1,   Fruity,  Active, NULL 
+0

只要你是在限制你的ContactID實際執行的內部連接。或者你是否正在尋找Table1中沒有匹配Table2中的條目的條目? – TheConstructor

+0

這就是我得到一個內部加入。我想展示所有的香水,有價值的和那些在同一時間沒有價值的香水。 我實際上在另一個線程中發現它。 http://stackoverflow.com/questions/1219909/mysql-join-with-where-clause 如果我沒有弄錯,我會在合併兩張表格後將結果限制爲我想要的值。然後我可以爲其他條件做一個WHERE。 感謝您的幫助:D – user3587156

回答

0

試試這個:

SELECT * FROM Table1 LEFT JOIN Table2 USING (fragranceId) WHERE contactId = 1 AND (value IS NULL OR value = 'Hate It') 

比較爲NULL,你應該使用IS NULLIS NOT NULL<=>作爲=總是返回NULL,如果一方是NULL和空後的計算結果爲假。

另外你可能會對COALESCE()感興趣,這是將NULL轉換爲文本的好方法。例如。使用COALESCE(value, 'No opinion given')來擺脫結果中的NULL值字段。

0

由於使用「正常」比較運算符的null的獨特屬性不會給你你所期望的。原因是邏輯上null表示未知。

所以如果值包含null。並且您比較value = null,結果是未知的,並且行未被mstched /返回。如果你問價值!= null結果是未知的,行不匹配。

SQl用關鍵字IS NULL和IS NOT NULL解決了這個問題。

因此,如果您聲明值IS NULL,那麼結果爲true,並且該行被匹配/返回。

0

如果你嘗試喜歡這個

select 
t1.fragranceId, 
t2.contactId, 
t1.description, 
t1.status, 
t2.value 
from 
Table1 t1 
left join Table2 t2 
on t1.fragranceId = t2.fragranceId 
and t2.value is not null 

看到這裏演示小提琴http://sqlfiddle.com/#!2/1a702/2