2017-10-13 49 views
0

我在使用COALESCE和JOIN時遇到了麻煩。我的計劃是:如何在同一時間使用COALESCE和JOIN並在MySQL中包含NULL值?

  • 創業列從我目前的表對陣從風險清單表VID列,並返回相應的企業名稱。
  • 如果在當前表企業列爲零(0)或空,另一列旁邊將選擇(「venture_other」列

雖然我的查詢返回其適當的值,在這種情況下,它看起來像NULL值被忽略。

venture_list表:

------------------- 
| vid | name  | 
------------------- 
| 1 | Malaysia | 
------------------- 
| 2 | Singapore | 
------------------- 

request_forms:

--------------------------------------------- 
| fid | username | venture | venture_other | 
--------------------------------------------- 
| 1 | jake.long | 2  |    | 
--------------------------------------------- 
| 2 | xander.f | 0  | Japan   | 
--------------------------------------------- 

預期結果

--------------- 
| venturename | 
--------------- 
| Singapore | 
--------------- 
| Japan  | 
--------------- 

實際結果

--------------- 
| venturename | 
--------------- 
| Singapore | 
--------------- 

這裏是我的查詢:

SELECT COALESCE(NULLIF(ventures.name, null), venture_other) AS venturename 
FROM request_forms forms 
JOIN venture_list ventures ON ventures.vid = forms.venture 

我試圖重新安排的列名,但沒有奏效。

+0

謝謝你的鏈接@Pang!我承認我英語不太好(可能只是一點「好」,哈哈哈)。 –

回答

1

的問題是,在一個JOIN MySQL的默認行爲是一個INNER JOIN。 顯然,由於venture_list中的第二行沒有匹配結果,所以只返回1行。

嘗試使用LEFT JOIN這樣ventures.name列將導致NULL,因此將使用venture_other

+0

此解決方案工作! 我仍然需要了解更多關於JOIN的知識。謝謝。 –

0

您在這裏的原始使用NULLIF()是奇特的。從文檔:

如果expr1 = expr2爲true,則返回NULL,否則返回expr1。

因此,您的聲明說:「如果ventures.name爲NULL,則返回NULL,否則返回ventures.name」。這是多餘的,因爲NULL將返回NULL,因爲它是NULL。

相反的情況,並正確使用NULLIF()你可以在該事件ventures.name是0NULLIF()返回NULL:

SELECT COALESCE(NULLIF(ventures.name, 0), venture_other) AS venturename 
FROM request_forms forms 
JOIN venture_list ventures ON ventures.vid = forms.venture 
0

你是相當接近,但需要更改NULLIF了一下:

select coalesce(nullif(ventures.name,0), venture_other) as venturename 
    from request_forms forms 
    join venture_list ventures 
    on ventures.vid = forms.venture; 

基本上,你要使用NULLIF爲空出ventures.name如果是0..then聚結沒有休息。

+0

我不知道爲什麼這個解決方案對我無效。謝謝你的方式。 –

相關問題