#sql #sql-server
#sql #sql-server
Вопрос:
Как я могу исправить эту ошибку:
Сообщение 156, уровень 15, состояние 1, инвентаризация процедур, строка 6 [Строка запуска пакета 2]
Неправильный синтаксис рядом с ключевым словом ‘Where’
Это мой код
create view inventory ([name], [description], [price])
as
Select
name, description, MaxPrice
From
item
Join
ITEM_TYPE
Where
item_id not in (Select itemid
From ORDER_ITEM
Where itemid not in (Select ItemID
From ITEM_DONATION
Where itemid not in (Select itemid
From item pickup)))
Go
Комментарии:
1. Вам не хватает
on
предложения для вашегоjoin
.2. Кроме того, наличие 3 вложенных подзапросов кажется многовато. Возможно, вы могли бы упростить использование дополнительных объединений…
3. используйте псевдонимы для имен таблиц!!!
Ответ №1:
Вам нужно определить условие соединения между вашими таблицами:
create view inventory
(
[name]
, [description]
, [price]
)
as
Select
name
, description
, MaxPrice
From
item
join
ITEM_TYPE
on item.<YOUR_FIELD>=ITEM_TYPE.<YOUR_FIELD>
Where
item_id not in
(
Select
itemid
From
ORDER_ITEM
Where
itemid not in
(
Select
ItemID
From
ITEM_DONATION
Where
itemid not in
(
Select
itemid
From
item pickup
)
)
)
Go
Ответ №2:
При получении товара )))
Если в названии таблицы есть пробел при получении элемента, что не является лучшей практикой, тогда вам нужно заключить имя в квадратные скобки [получение элемента].
И, чтобы расширить сообщение Хайме, это также помогло бы использовать псевдонимы таблиц для определения таблиц и использовать их в столбцах, поэтому, если в обеих таблицах есть столбцы с одинаковыми именами, тогда SQL Server знает, на какой table_name.column_name вы ссылаетесь.