#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:
В опубликованном вами коде есть несколько ошибок.
-
Для инструкции 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
-
И я мог видеть другой оператор SELECT, который не имеет смысла в представлении. Добавление второго оператора SELECT вызовет ошибку «Неправильный синтаксис рядом с ключевым словом ‘SELECT'». для второго оператора SELECT.
Комментарии:
1. итак, вы говорите, что я не должен включать два оператора SELECT в оператор one VIEW?
2. Да, без этого вы получите ошибку «Неправильный синтаксис рядом с ключевым словом ‘SELECT'». для второго оператора SELECT.