Неправильный синтаксис рядом с ключевым словом ‘SELECT’. ошибка создания представления

#sql #select #view

#sql #выберите #Вид

Вопрос:

Я создаю представление для базы данных для назначения,

однако я продолжаю получать эту ошибку в своем коде.

 CREATE VIEW Rental_View

SELECT Mo.Movie_ID, copy_id, mo.Movie_Name, format_name
FROM Movies AS mo JOIN copies AS co
ON mo.Movie_ID = co.movie_id  
JOIN format AS fo
ON co.Format_id = fo.format_id

SELECT c.customer_id, rental_ID, DATEDIFF (day, rental_date, return_date) AS  rental_duration' , c.first_name   ' '   c.last_name AS customer_name
FROM Customers AS c INNER JOIN rentals AS r
ON c.customer_ID = r.customer_ID
  

В первом операторе SELECT это подчеркнуто красным, и я получаю ошибку

«Неправильный синтаксис рядом с ключевым словом ‘SELECT'».

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

заранее спасибо.

Комментарии:

1. Первое SELECT — определить VIEW . Для чего нужен второй?

2. я не знал, что у вас не может быть двух операторов SELECT, как я могу сделать так, чтобы у меня был весь приведенный выше код в одном операторе VIEW? Спасибо

Ответ №1:

Вам нужно AS ключевое слово:

 CREATE VIEW Rental_View   AS            --- <------ AS needed here

SELECT mo.Movie_ID                     --- mo, not Mo
     , co.copy_id                      --- play safe and declare which table 
     , mo.Movie_Name
     , fo.format_name                  --- are these two columns from
FROM Movies AS mo JOIN copies AS co
ON mo.Movie_ID = co.movie_id  
JOIN format AS fo
ON co.Format_id = fo.format_id  
;                                     --- add a ; if you want to
                                      --- run multiple statements
  

Если вы хотите объединить два SELECT в один, вам нужно JOIN использовать таблицы из обоих, используя что-то вроде этого:

 CREATE VIEW Rental_View   AS           

SELECT mo.Movie_ID                     
     , co.copy_id                      
     , mo.Movie_Name
     , fo.format_name                  
     , c.customer_id
     , rental_ID
     , DATEDIFF (day, rental_date, return_date) AS rental_duration 
     , c.first_name   ' '   c.last_name AS customer_name
FROM Movies AS mo 
  JOIN copies AS co
    ON mo.Movie_ID = co.movie_id  
  JOIN format AS fo
    ON co.Format_id = fo.format_id  

  JOIN rentals AS r
    ON r.movie_id = mo.Movie_id        --- just a guess, you have to write this
  JOIN Customers AS c 
    ON c.customer_ID = r.customer_ID
  

Комментарии:

1. Пробовал это уже, затем я получаю синтаксическую ошибку в «CREATE VIEW Rental_view» как неправильный синтаксис

2. Затем вы должны сказать нам, для чего предназначен второй выбор. Связано ли это с представлением? Попробуйте запустить две части кода отдельно.

3. хорошо, я исправил все вышесказанное, о котором вы упомянули, хотя я все еще получаю синтаксическую ошибку в верхней строке «СОЗДАТЬ ПРЕДСТАВЛЕНИЕ Rental_View КАК», все подчеркнуто красным с синтаксической ошибкой, также есть ли у меня вторая инструкция select в правильном месте? можете ли вы даже иметь вторую инструкцию SELECT в инструкции VIEW. Второе представление связано с первым, было интересно, могу ли я включить их все в одно утверждение … или было бы проще создать другое представление вместо этого?

Ответ №2:

 CREATE VIEW Rental_View
AS
  

вам не хватает ключевого слова «AS»

Ответ №3:

Вы смотрите, что после rental_duration в этом коде есть ошибочная одинарная кавычка —

 SELECT c.customer_id, rental_ID, DATEDIFF (day, rental_date, return_date) AS  rental_duration' , c.first_name   ' '   c.last_name AS customer_name
FROM Customers AS c INNER JOIN rentals AS r
ON c.customer_ID = r.customer_ID
  

попробуйте

 SELECT c.customer_id, rental_ID, DATEDIFF (day, rental_date, return_date) AS  rental_duration , c.first_name   ' '   c.last_name AS customer_name
FROM Customers AS c INNER JOIN rentals AS r
ON c.customer_ID = r.customer_ID
  

Комментарии:

1. спасибо, этого не видел, хотя это не помогает мне с первым оператором SELECT … не уверен, какой неправильный синтаксис во второй строке? ВЫБЕРИТЕ Mo.Movie_ID, copy_id, mo.Movie_Name, format_name

Ответ №4:

вы можете попробовать изменить первый select из

ВЫБЕРИТЕ Mo.Movie_ID, copy_id, mo.Movie_Name, format_name

Для

ВЫБЕРИТЕ mo.Movie_ID, copy_id, mo.Movie_Name, format_name

Ответ №5:

Попробуйте:

 CREATE VIEW Rental_View
AS
  SELECT Mo.Movie_ID, copy_id, mo.Movie_Name, format_name
  FROM Movies AS mo JOIN copies AS co
  ON mo.Movie_ID = co.movie_id  
  JOIN format AS fo
  ON co.Format_id = fo.format_id

CREATE VIEW Rental_Duration
AS
      SELECT c.customer_id, rental_ID, DATEDIFF (day, rental_date, return_date) AS  rental_duration , c.first_name     ' '   c.last_name AS customer_name
      FROM Customers AS c INNER JOIN rentals AS r
     ON c.customer_ID = r.customer_ID
  

Обычно вы не создаете представление, которое возвращает более одного результирующего набора. Если это действительно то, что вы хотите, то блок BEGIN / END должен решить проблему (непроверенный — не перед любым RDMS прямо сейчас):

 CREATE VIEW Rental_View
AS
BEGIN
  SELECT Mo.Movie_ID, copy_id, mo.Movie_Name, format_name
  FROM Movies AS mo JOIN copies AS co
  ON mo.Movie_ID = co.movie_id  
  JOIN format AS fo
  ON co.Format_id = fo.format_id

  SELECT c.customer_id, rental_ID, DATEDIFF (day, rental_date, return_date) AS  rental_duration , c.first_name     ' '   c.last_name AS customer_name
      FROM Customers AS c INNER JOIN rentals AS r
     ON c.customer_ID = r.customer_ID
END
  

Комментарии:

1. Попробовал это, и я получаю синтаксическую ошибку с помощью BEGIN. :/ может быть, мне будет проще создать два представления? Я попробую ваш первый метод. Спасибо.

2. Я только что исправил свою ошибку. простой переход между On и SELECT с добавлением AS в первой части моего заявления исправил все это.

3. кроме того, добавление второго оператора view также сработало, но с немного большим количеством манипуляций. спасибо!

4. @Wayne: Вы не можете включить два оператора SELECT в одно представление.

Ответ №6:

В опубликованном вами коде есть несколько ошибок.

  1. Для инструкции CREATE VIEW требуется ключевое слово AS для инструкции SELECE. Вы могли бы сделать это как:

     CREATE VIEW Rental_View
    AS
    SELECT Mo.Movie_ID, copy_id, mo.Movie_Name, format_name
    FROM Movies AS mo JOIN copies AS co
    ON mo.Movie_ID = co.movie_id  
    JOIN format AS fo
    ON co.Format_id = fo.format_id
      
  2. И я мог видеть другой оператор SELECT, который не имеет смысла в представлении. Добавление второго оператора SELECT вызовет ошибку «Неправильный синтаксис рядом с ключевым словом ‘SELECT'». для второго оператора SELECT.

Комментарии:

1. итак, вы говорите, что я не должен включать два оператора SELECT в оператор one VIEW?

2. Да, без этого вы получите ошибку «Неправильный синтаксис рядом с ключевым словом ‘SELECT'». для второго оператора SELECT.