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

Откуда:
Сообщений: 3
Всем привет.
Помогите найти ошибку.

Условие таково:

Из таблицы "products" выбрать наименования продуктов относящихся к категории "Seafood", но и при условии, что регион поставщика (Region) не известен.

Запрос который написал я, выглядит следующим образом:

select P.ProductName
from Products P
join Categories C
on C.CategoryID = P.CategoryID
where C.CategoryName = 'Seafood'
join Suppliers S
on S.SupplierID = P.SupplierID
where S.Region IS NULL

Сообщение об ошибке звучит так:

Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'join'.
17 июл 19, 22:50    [21928963]     Ответить | Цитировать Сообщить модератору
 Re: получаю сообщение об ошибке. помогите разобраться.  [new]
PizzaPizza
Member

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

Сервер не может понять к чему относятся ваши where clause.
Условия для join пишутся в другом формате, без where.
В одном предложении может быть только одно where clause.
Почему у вас условия where C.CategoryName = 'Seafood' и where S.Region IS NULL отдельно?
17 июл 19, 23:12    [21928980]     Ответить | Цитировать Сообщить модератору
 Re: получаю сообщение об ошибке. помогите разобраться.  [new]
Leon4ik
Member

Откуда:
Сообщений: 3
PizzaPizza,
Так как при поставленном условии я вынужден использовать данные из трех таблиц, а регион поставщика находится в таблице ("Suppliers"), которую мне нужно присоединить к предыдущим таблицам и уж тогда указать дополнительное условие.

возможно я заблуждаюсь, так как я пока обучаюсь.

Вы могли бы внести в коррективы в запросе?
17 июл 19, 23:32    [21928994]     Ответить | Цитировать Сообщить модератору
 Re: получаю сообщение об ошибке. помогите разобраться.  [new]
Leon4ik
Member

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

Спасибо, вы оказались правы.
Немного изменил запрос и всё заработало.

А вот и исправленный запрос:

select P.ProductName
from Products P
join Categories C
on C.CategoryID = P.CategoryID
join Suppliers S
on S.SupplierID = P.SupplierID
where C.CategoryName = 'Seafood' and S.Region IS NULL
17 июл 19, 23:58    [21929009]     Ответить | Цитировать Сообщить модератору
 Re: получаю сообщение об ошибке. помогите разобраться.  [new]
PizzaPizza
Member

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

Ага
Вы просите сервер применить условие where к выборке, которая представляет собой объединение таблиц по условию объединения.

Вы могли бы написать условие объединения ограничив вторую таблицу вашим условием S.Region IS NULL , но тогда в условии объединения это пишется в секции ON вроде этого
ON S.SupplierID = P.SupplierID AND S.Region IS NULL

Но не забывайте про декларативность языка - вы просите сервер сделать так, а физическое выполнение это другая история. Соответственно и разница вариантов в вашем случае будет только в тексте запроса, а не в его исполнении на сервере.
18 июл 19, 02:09    [21929025]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить