2011-11-07 204 views
-1

我正在爲一個任務創建數據庫的視圖,關鍵字'SELECT'附近的語法不正確。創建一個視圖錯誤

我不斷在我的代碼中收到此錯誤。

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'。第二個是什麼? –

+0

我不知道你不可能有兩個SELECT語句,我怎樣才能讓它在一個VIEW語句中擁有上述所有代碼? 謝謝 – LewisFletch

回答

2

您需要AS keyw ORD:

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 
+0

試過了,我再拿到 語法錯誤「CREATE VIEW Rental_view」作爲一個不正確的語法 – LewisFletch

+0

然後,你要告訴我們的第二個選擇是什麼對於。它與視圖有關嗎?嘗試分別運行兩個代碼部分。 –

+0

好吧,我已經修復了所有上述的,你所提到的,雖然我現在仍然沿頂線 出現語法錯誤「CREATE VIEW Rental_View AS」 所有紅色下劃線有語法錯誤, 也有我在正確的地方得到第二個選擇語句?你甚至可以在VIEW語句中有第二個SELECT語句。 第二個視圖與第一個視圖相關,想知道是否可以將它們全部包含在一個聲明中... 或者是否更容易創建另一個視圖? – LewisFletch

0

你看看上面有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 
+0

謝謝,沒有看到那一個,雖然這不幫助我與第一個SELECT語句......不知道第二行不正確的語法是什麼? SELECT Mo.Movie_ID,copy_id,mo.Movie_Name,FORMAT_NAME – LewisFletch

1
CREATE VIEW Rental_View 
AS 

你缺少的 「AS」 關鍵字

0

你可以嘗試改變第一從

選擇選擇Mo.Movie_ID,copy_id,mo.Movie_Name,FORMAT_NAME

選擇mo.Movie_ID,copy_id,mo.Movie_Name,FORMAT_NAME

0

有在你已經發布的代碼多個錯誤。

  1. 對於SELECE語句,CREATE VIEW語句需要AS關鍵字。你可能會這樣做:

    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語句。

+0

所以你說我不應該在一個VIEW語句中包含兩個SELECT語句? – LewisFletch

+0

是的,沒有這個,你會得到一個錯誤「關鍵字'SELECT'附近的語法錯誤。」爲第二個SELECT語句。 – Kangkan

0

嘗試:

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塊應該解決的問題(未測試 - 不盈任何關係數據庫管理系統的現在):

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 
+0

試過了,我得到BEGIN語法錯誤。 :/我可能更容易創建兩個視圖?我會嘗試你的第一個方法。謝謝。 – LewisFletch

+0

我剛剛修復了我的錯誤。在On和SELECT之間添加一個簡單的GO,在我的聲明的第一部分添加了AS,從而修復了整個事情。 – LewisFletch

+0

另外,第二個視圖語句的添加也起作用,但是稍微擺弄一下。謝謝! – LewisFletch

相關問題