при использовании «SELECT varname = что-то + что-то и т. д. я не могу затем сделать« ГДЕ varname = ... » - PullRequest
1 голос
/ 10 апреля 2019

у меня есть:

 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)

Это дает мне то, что выглядит как столбец, но не так:

enter image description here

Я хочу получить его, чтобы мой код выбирал только те строки из ключевых слов, которые соответствуют тому, что печатает пользователь. Обычно, если бы KEYWORDS был столбцом, я бы написал:

SELECT .... WHERE KEYWORDS = '%whateverTheUserIsTyping%'

но я не могу, потому что ключевые слова не являются реальным столбцом, и он говорит мне, что он не существует.

Как мне обойти это? спасибо

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Псевдоним столбца 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%'
1 голос
/ 10 апреля 2019

Вы можете использовать производную таблицу с псевдонимом (здесь 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...