Сообщение 156, уровень 15, состояние 1, инвентаризация процедур, строка 6 [Строка запуска пакета 2] Неправильный синтаксис рядом с ключевым словом ‘Where’

#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 вы ссылаетесь.