Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование имени столбца для фильтрации  [new]
AutoTrader
Member

Откуда:
Сообщений: 13
Знаю точно что проблема лежит в моем незнании.
Прошу снисходительно отнестись.

Есть запрос:
select a1
,a2
,a3
,(select b1 from b where b2=x) AS 'C1'
from a
where a4=x2 and C1 like '%приветмир%'

Так вот: сервер сообщает, что С1 не является правильным именем столбца таблицы "а"

MS SQL 2005

С Уважением, ко всем откликнувшимся!
Спасибо!
8 сен 14, 17:14    [16551033]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
KostaRico
Member

Откуда:
Сообщений: 67
Если подзапрос (select b1 from b where b2=x) возвращает одну строку, и данных не очень много, то не оптимизированное решение в лоб: в секции where вместо "C1 like ..." повторить выражение "(select b1 from b where b2=x) like ..."
8 сен 14, 17:27    [16551105]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
AutoTrader
Member

Откуда:
Сообщений: 13
KostaRico,

Да, он возвращает одну строку.
Такое решение тоже пришло мне в голову.
Не знаю насколько это оптимально.
8 сен 14, 17:29    [16551115]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
AutoTrader,

может у вас таблицы хоть как-то связанны ?
8 сен 14, 17:36    [16551159]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Как минимум можно сделать подзапрос

select *
from (select a1,
                   a2, 
                   a3,
,(select b1 from b where b2=x) AS 'C1' 

...) v
where  C1 like '%приветмир%'

Если у Вас х - константа, а не поле таблицы а, вообще лучше вынести расчет C1 из select-а.
8 сен 14, 17:36    [16551163]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
AutoTrader
Member

Откуда:
Сообщений: 13
Кот Матроскин,

Интересно, пробую.
8 сен 14, 17:42    [16551195]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
AutoTrader
Member

Откуда:
Сообщений: 13
AutoTrader,

Отлично! все работает, спасибо.

У меня только один вопрос взорвавший мне мозг:
select *
from (select a1,
                   a2, 
                   a3,
,(select b1 from b where b2=x) AS 'C1' 

[u][b]...) v[/b][/u]
where  C1 like '%приветмир%'


ПОЧЕМУ БЕЗ выделенной "v" не работает

молю объясните)
8 сен 14, 17:52    [16551251]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
AutoTrader
Member

Откуда:
Сообщений: 13
AutoTrader
AutoTrader,

Отлично! все работает, спасибо.

У меня только один вопрос взорвавший мне мозг:
select *
from (select a1,
                   a2, 
                   a3,
,(select b1 from b where b2=x) AS 'C1' 

[u][b]...) v[/b][/u]
where  C1 like '%приветмир%'


ПОЧЕМУ БЕЗ выделенной "v" не работает

молю объясните)


вроде как V это имя новой таблицы?
8 сен 14, 17:56    [16551265]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
AutoTrader
ПОЧЕМУ БЕЗ выделенной "v" не работает
Потому что при использовании подзапросов алиас обязателен, даже если результаты подзапросы не использовались бы. Просто синтаксис такой, объяснить это нельзя.
8 сен 14, 18:27    [16551429]     Ответить | Цитировать Сообщить модератору
 Re: Использование имени столбца для фильтрации  [new]
AutoTrader
Member

Откуда:
Сообщений: 13
alexeyvg,

Низкий поклон вам бояре !!!

Всем спасибо вопрос закрыт!
8 сен 14, 18:34    [16551458]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить