web-dev-qa-db-fra.com

MySQL SELECT AS combine deux colonnes en une seule

En utilisant cette solution , j'ai essayé d'utiliser COALESCE dans le cadre d'une requête MySQL qui renvoie dans un fichier csv en utilisant SELECT As pour nommer les noms de colonne lors de l'exportation des données.

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , ContactPhoneAreaCode1
     , ContactPhoneNumber1
     , COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Je voulais 3 colonnes: First_Name, Last_Name et Contact_Phone

Je reçois 5 colonnes: Prénom, Nom, ContactPhoneAreaCode1, ContactPhoneNumber1 et Contact_Phone

Comment masquer la fusion de ContactPhoneAreaCode1, ContactPhoneNumber1 dans une colonne unique pour Contact_Phone dans la requête?

57
Rocco The Taco

Si les deux colonnes peuvent contenir NULL, mais que vous souhaitez toujours les fusionner en une seule chaîne, la solution la plus simple consiste à utiliser CONCAT_WS () =:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT_WS('', ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

De cette façon, vous ne devrez pas vérifier séparément NULLness de chaque colonne.

Alternativement, si les deux colonnes sont définies comme suit: NOT NULL, CONCAT () suffira amplement:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

Quant à COALESCE, c'est un peu différent: vu la liste des arguments, il retourne le premier qui n'est pas NULL.

120
raina77ow

Vous n'avez pas besoin de lister ContactPhoneAreaCode1 et ContactPhoneNumber1

SELECT FirstName AS First_Name, 
LastName AS Last_Name, 
COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
FROM TABLE1
6
sung

Vous n'avez pas besoin de sélectionner les colonnes séparément pour les utiliser dans votre CONCAT. Supprimez-les simplement et votre requête deviendra:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1
5
GamerJosh

Dans le cas de NULL colonnes, il est préférable d'utiliser la clause IF comme celle-ci, qui combine les deux fonctions de: CONCAT et COALESCE et utilise des caractères spéciaux entre les colonnes du résultat, comme espace ou '_'

SELECT FirstName , LastName , 
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
AS Contact_Phone FROM   TABLE1
1
ganji