При использовании «SELECT varname = something + something и т. д. Я не могу сделать «WHERE varname = ..."

У меня есть:

 SELECT KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' + 
 RTRIM(SD) + ' ' + RTRIM(NL.LOCALITY_NAME) + ' ' + 
 RTRIM(NT.TOWN_NAME) + ' ' + RTRIM(NA.AUTHORITY_NAME)

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

При использовании «SELECT varname = something + something и т. д. Я не могу сделать «WHERE varname = ..."

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

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

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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Другие вопросы по теме