MySQL select с условием CONCAT
Я пытаюсь скомпилировать это в моей голове.. у меня есть таблица с полями firstname и lastname и у меня есть строка, как "Боб Джонс" или "боб Майкл Джонс" и несколько других.
дело в том, что у меня к примеру Боб в firstName и Майкл Джонс в фамилии
поэтому я пытаюсь
SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast
FROM users
WHERE firstlast = "Bob Michael Jones"
но он говорит неизвестный столбец "firstlast".. кто-нибудь может помочь, пожалуйста ?
6 ответов:
псевдонимы, которые вы даете, предназначены для вывода запроса - они недоступны в самом запросе.
Вы можете либо повторять выражение:
SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast FROM users WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
или обернуть запрос
SELECT * FROM ( SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast FROM users) base WHERE firstLast = "Bob Michael Jones"
попробуйте это:
SELECT * FROM ( SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast FROM users ) a WHERE firstlast = "Bob Michael Jones"
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast FROM users WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
использовать CONCAT_WS().
SELECT CONCAT_WS(' ',firstname,lastname) as firstlast FROM users WHERE firstlast = "Bob Michael Jones";
первый аргумент является разделителем для остальных аргументов.
попробуй:
SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast FROM users WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
ваш псевдоним firstlast недоступен в предложении where запроса, если вы не выполняете запрос в качестве подзапроса.
есть альтернатива повторению
CONCAT
выражение или использование подзапросов. Вы можете использоватьHAVING
предложение, которое распознает псевдонимы столбцов.SELECT neededfield, CONCAT(firstname, ' ', lastname) AS firstlast FROM users HAVING firstlast = "Bob Michael Jones"
вот такой рабочий SQL Fiddle.