У меня есть:
SELECT KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(SD) + ' ' + RTRIM(NL.LOCALITY_NAME) + ' ' +
RTRIM(NT.TOWN_NAME) + ' ' + RTRIM(NA.AUTHORITY_NAME)
Это дает мне то, что выглядит как столбец, но не является им:
Я хочу, чтобы мой код выбирал только те строки из KEYWORDS, которые соответствуют тому, что вводит пользователь. Обычно, если бы KEYWORDS был столбцом, я бы написал:
SELECT .... WHERE KEYWORDS = '%whateverTheUserIsTyping%'
но я не могу, потому что ключевые слова не являются реальным столбцом, и он говорит мне, что его не существует.
Как мне обойти это? Спасибо
Вы можете использовать производную таблицу с псевдонимом (здесь Q
) и получить результат путем фильтрации в предложении WHERE
:
SELECT Q.KEYWORDS FROM (
SELECT KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' +
RTRIM(NSG_TOWN.TOWN_NAME) + ' ' + RTRIM(NSG_AUTHORITY.AUTHORITY_NAME)
) AS Q
WHERE Q.KEYWORDS LIKE '%whateverTheUserIsTyping%'
Потому что вы не можете использовать псевдоним столбца в предложении WHERE
, как вы упомянули. Также вместо KEYWORDS = '%whateverTheUserIsTyping%'
вы можете использовать оператор LIKE
.
Псевдоним столбца KEYWORDS
не виден SQL Engine во время оценки предложения WHERE
. Однако вы можете просто повторить свое заявление CAST
.
SELECT
KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' +
RTRIM(NSG_TOWN.TOWN_NAME) + ' ' + RTRIM(NSG_AUTHORITY.AUTHORITY_NAME)
FROM yourTable
WHERE
CAST(USRN AS VARCHAR(15)) + ' ' +
RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' +
RTRIM(NSG_TOWN.TOWN_NAME) + ' ' + RTRIM(NSG_AUTHORITY.AUTHORITY_NAME)
LIKE '%whateverTheUserIsTyping%'