MySQL выберите с условием CONCAT - PullRequest
107 голосов
/ 20 апреля 2011

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

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

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

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

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

Ответы [ 6 ]

168 голосов
/ 20 апреля 2011

Псевдонимы, которые вы даете, предназначены для вывода запроса - они не доступны в самом запросе.

Вы можете повторить выражение:

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"
34 голосов
/ 20 апреля 2011

Попробуйте это:

SELECT * 
  FROM  (
        SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
        FROM users 
    ) a
WHERE firstlast = "Bob Michael Jones"
10 голосов
/ 20 апреля 2011
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
8 голосов
/ 20 января 2014

Используйте CONCAT_WS ().

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

Первый аргумент - это разделитель для остальных аргументов.

7 голосов
/ 10 января 2014

Существует альтернатива повторению выражения CONCAT или использование подзапросов. Вы можете использовать предложение HAVING, которое распознает псевдонимы столбцов.

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

Вот рабочая SQL Fiddle .

7 голосов
/ 20 апреля 2011

Попробуйте:

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

Ваш псевдоним firstlast недоступен в предложении where запроса, если вы не выполните запрос в качестве дополнительного выбора.

...