2015-11-30 3 views
0

Логика довольно проста: у меня есть первые, фамильные столбцы, и я хочу их конкатенировать и выполнить поиск на основе конкатенированного столбца fullName.Альтернатива WHERE на псевдониме

Мой запрос не работает, так как я не могу сделать, где на псевдоним:

SELECT CONCAT(profile_firstname, ' ', profile_lastname) AS fullName FROM Profiles WHERE fullName = '%a%'; 

Что бы альтернатива приобретает такой же результат?

+0

Внешний запрос, в котором существует 'fullname', может быть' where fullname = ... ' – PhillipD

+0

Он только что сказал, что псевдоним, созданный из конкатенации, не позволяет ему использовать его в критериях WHERE. Я бы предложил добавить вашу конкатенацию в предложение where тоже ** WHERE CONCAT (profile_firstname, '', profile_lastname) = '% a%' ** –

ответ

3

Вы можете использовать пункт having, например (в вашем конкретном случае):

having fullName = '%a%'; 
+0

Спасибо, однако, я получаю пустой набор результатов, когда я его связываю в конце мой запрос вместо того, где. Правильно ли я это делаю? – jacobdo

+0

Да, вы должны использовать его вместо того, где – potashin

+2

'HAVING' для агрегированных значений, хотя это разрешено без' GROUP BY', это не имеет смысла заменить 'WHERE' на него. – DanFromGermany

4

Это может быть больше, что вы ищете ......

SELECT Sub_Query.* 
FROM 
(
    SELECT CONCAT(profile_firstname, ' ', profile_lastname) AS fullName FROM Profiles 
) Sub_Query 
WHERE 
    Sub_Query.fullName = '%a%'; 

Но вы можете подумать о представлении, которое будет иметь fullName и запускать ваши запросы против этого ... что по сути является тем, что происходит в этом.

3

Это будет работать:

SELECT CONCAT(profile_firstname, ' ', profile_lastname) AS fullName 
FROM Profiles 
WHERE CONCAT(profile_firstname, ' ', profile_lastname) = '%a%' 
1

Вы можете использовать ниже:

SELECT (profile_firstname + '' + profile_lastname) AS FULLNAME из профилей WHERE (profile_firstname + '' + profile_lastname) LIKE «% a% '

+0

Оцените альтернативу, но я поклонник использования HAVING, это прямая замена WHERE и, похоже, помогает сохранить запрос более аккуратным :) – jacobdo

Смежные вопросы