选择期间如何合并,合并并忽略空值? MySQL的

时间:2018-11-01 12:43:44

标签: mysql sql

我的桌子是这样的:

KeyValueCache

,我想将相应列的名称附加到相应的值。像这样的东西:

Id | Name | ph_office | ph_home   
1  | ab   |  111      | NULL   
2  | cd   |  NULL     | 222   
3  | ef   |  333      | 444  
4  | gh   |  NULL     | NULL

我尝试使用

Id | Name | phone   
1  | ab   |  phone_office: 111   
2  | cd   |  phone_home: 222  
3  | ef   |  phone_office: 333, phone_home: 444  
4  | gh   |  NULL 

我想忽略具有空值的列。我对select id, Name, CONCAT('ph_office: ', COALESCE(ph_office,''),',','ph_home:',COALESCE(ph_home,'')) as phone from contacts; Id | Name | phone 1 | ab | ph_office: 111,ph_home: 2 | cd | ph_office:, ph_home: 222 3 | ef | ph_office: 333, ph_home: 444 4 | gh | ph_office:,ph_home 的陈述不太擅长。如何在mysql中完成?

感谢您的时间

2 个答案:

答案 0 :(得分:2)

  • 您可以使用Concat()函数代替Concat_ws()。它用于通过给定的分隔符连接多个子字符串。如果任何子字符串为<script> import pai from './pai' export default {components: {parent}, data: () => ({ valueMsg = 'Hello Test' }) } ,则将其跳过。这在任何一个为Null的情况下都会对我们有帮助;这样我们就不必再加上前导/尾随逗号了。
  • 此外,您可以使用Case .. When来考虑仅当字符串的值null时才串联的字符串

请尝试以下操作:

IS NOT NULL

编辑(未意识到Gordon Linoff已经使用以下方法进行了回答):

但是,可以使用不使用SELECT id, Name, CONCAT_WS(', ', (CASE WHEN ph_office IS NOT NULL THEN CONCAT('ph_office: ', ph_office) END), (CASE WHEN ph_home IS NOT NULL THEN CONCAT('ph_home: ', ph_home) END) ) AS phone FROM contacts; 的更整洁的技术。通过Case .. When函数的Docs

  

如果任何参数为NULL,则CONCAT()返回NULL。

Concat()

请注意,仅当SELECT id, Name, CONCAT_WS(', ', CONCAT('ph_office: ', ph_office), CONCAT('ph_home: ', ph_home) ) AS phone FROM contacts; ph_office的值为ph_home而不是空字符串时,此方法才有效。

答案 1 :(得分:2)

使用CONCAT_WS()

select id, Name, 
       concat_ws(', ',
                 concat('phone_office: ', ph_office),
                 concat('ph_home: ', ph_home) 
                ) as phones
from contacts;