MySQL CONCAT devuelve NULL si algún campo contiene NULL

Tengo los siguientes datos en mi tabla "dispositivos"

affiliate_name affiliate_location model ip os_type os_version cs1 inter Dell 10.125.103.25 Linux Fedora cs2 inter Dell 10.125.103.26 Linux Fedora cs3 inter Dell 10.125.103.27 NULL NULL cs4 inter Dell 10.125.103.28 NULL NULL 

Ejecuté debajo de la consulta

 SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices 

Devuelve el resultado dado a continuación

 cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL) 

Cómo salir de esto para que ignore el resultado NULL AND debe ser

 cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora cs3-Dell-10.125.103.27- cs4-Dell-10.125.103.28- 

convierte los valores NULL con cadena vacía envolviéndolo en COALESCE

 SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name FROM devices 

Use CONCAT_WS en su lugar:

CONCAT_WS () no omite cadenas vacías. Sin embargo, omite cualquier valor NULL después del argumento separador.

 SELECT CONCAT_WS('-',`affiliate_name`,`model`,`ip`,`os_type`,`os_version`) AS device_name FROM devices 
 SELECT CONCAT(isnull(`affiliate_name`,''),'-',isnull(`model`,''),'-',isnull(`ip`,''),'-',isnull(`os_type`,''),'-',isnull(`os_version`,'')) AS device_name FROM devices 

Para tener la misma flexibilidad en CONCAT_WS que en CONCAT (si no desea el mismo separador entre cada miembro, por ejemplo) use lo siguiente:

 SELECT CONCAT_WS("",affiliate_name,':',model,'-',ip,... etc) 

CONCAT_WS todavía produce null para mí si el primer campo es nulo. Lo resolví agregando una cadena de longitud cero al principio como en CONCAT_WS ("", affiliate_name , '-', model , '-', ip , '-', os_type , '-', os_version ) sin embargo CONCAT ("" , affiliate_name , '-', model , '-', ip , '-', os_type , '-', os_version ) produce nulo cuando el primer campo es nulo.

puedes usar la instrucción if como abajo

 select CONCAT(if(affiliate_name is null ,'',affiliate_name),'- ',if(model is null ,'',affiliate_name)) as model from devices