MySQL SELECT AS объединяет два столбца в один
Используя это решение, я попытался использовать COALESCE как часть MySQL-запроса, который выводит в файл csv с помощью SELECT As, чтобы назвать имена столбцов при экспорте данных.
SELECT FirstName AS First_Name
, LastName AS Last_Name
, ContactPhoneAreaCode1
, ContactPhoneNumber1
, COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone
FROM TABLE1
Мне нужны 3 столбца: First_Name, Last_Name и Contact_Phone
Я получаю 5 столбцов: First_Name, Last_Name, ContactPhoneAreaCode1, ContactPhoneNumber1 и Contact_Phone
Как скрыть объединение ContactPhoneAreaCode1, ContactPhoneNumber1 в один столбец для Contact_Phone из запроса?
Ответы
Ответ 1
Если оба столбца могут содержать NULL
, но вы все же хотите объединить их в одну строку, самым простым решением будет использование CONCAT_WS ( ):
SELECT FirstName AS First_Name
, LastName AS Last_Name
, CONCAT_WS('', ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone
FROM TABLE1
Таким образом вам не придется проверять наличие NULL
-ness каждого столбца отдельно.
В качестве альтернативы, если оба столбца фактически определены как NOT NULL
, CONCAT() будет достаточно:
SELECT FirstName AS First_Name
, LastName AS Last_Name
, CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone
FROM TABLE1
Что касается COALESCE
, это немного другое зверь: учитывая список аргументов, он возвращает первое, а не NULL
.
Ответ 2
Вам не нужно выбирать столбцы отдельно, чтобы использовать их в своем CONCAT. Просто удалите их, и ваш запрос станет следующим:
SELECT FirstName AS First_Name
, LastName AS Last_Name
, CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone
FROM TABLE1
Ответ 3
Вам не нужно указывать ContactPhoneAreaCode1 и ContactPhoneNumber1
SELECT FirstName AS First_Name,
LastName AS Last_Name,
COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone
FROM TABLE1
Ответ 4
В случае столбцов NULL
лучше использовать предложение IF
, подобное этому, которое объединяет две функции: CONCAT
и COALESCE
и использует специальные символы между столбцами в результате, например, в пространстве или '_'
SELECT FirstName , LastName ,
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,'')))
AS Contact_Phone FROM TABLE1