MySQL select с условием CONCAT


Я пытаюсь скомпилировать это в моей голове.. у меня есть таблица с полями firstname и lastname и у меня есть строка, как "Боб Джонс" или "боб Майкл Джонс" и несколько других.

дело в том, что у меня к примеру Боб в firstName и Майкл Джонс в фамилии

поэтому я пытаюсь

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
 WHERE firstlast = "Bob Michael Jones"

но он говорит неизвестный столбец "firstlast".. кто-нибудь может помочь, пожалуйста ?

6 101

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.