2017-10-13 44 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

我不知道为什么这个解决方案对我无效。谢谢你的方式。 –

相关问题