2012-12-03 104 views
1

我有一個叫家的觀點:結合SQL視圖與左外連接查詢

CREATE VIEW `skohr`.`Home` AS 
Select Song_OID, Song_Name, Album_Name, Artist_First_Name, Artist_Last_Name, Band_Name, Genre, Album_Art_File_Path 
From Song, Album, Artist, Track_Number, Made 
Where Song_OID = Track_Number.Song_OID_FK AND Album_OID=Track_Number.Album_OID_FK AND Album_OID=Made.Album_OID_FK AND Artist_OID=Made.Artist_OID_FK 
ORDER BY Song_Name Asc 

我跑在視圖下面的查詢得到我想要的表:

Select DISTINCT * From Home LEFT OUTER JOIN (SELECT * FROM Song_Setting, user WHERE User_OID=User_OID_FK) AS UserSongs 
ON Song_OID=Song_OID_FK 

如何合併將兩個單獨的查詢合併爲一個來創建單個視圖?

+0

您是否嘗試過在查詢前添加CREATE VIEW語句? – PinnyM

+0

這是MySQL嗎? SQL Server?甲骨文? –

回答

1

儘量只創建視圖

CREATE VIEW `skohr`.`MyNewView` AS 

Select DISTINCT * From Home h 
LEFT OUTER JOIN Song_Setting x 
    ON h.Song_OID_FK = x.Song_OID 
INNER JOIN user u 
    ON u.User_OID = x.User_OID_FK 
+0

我嘗試過這一點,但這樣的老毛病又犯,我得到了以下錯誤消息。在服務器 執行SQL腳本 錯誤:錯誤1349:視圖的SELECT包含在FROM子句中的子查詢 CREATE OR REPLACE VIEW'skohr'.'Home2' AS SELECT DISTINCT *從主頁 LEFT OUTER JOIN (SELECT * FROM Song_Setting,用戶WHERE User_OID = User_OID_FK)AS UserSongs ON Song_OID = Song_OID_FK –

+0

我已經編輯它刪除子查詢 –

-1

::迴應置評請求MySQL版本::

我未明確使用MySQL的今天做,但有你不能使用子查詢的任何理由就像你有其他數據集一樣?這樣的事情:

Select DISTINCT * From 
(
    Select Song_OID, Song_Name, Album_Name, Artist_First_Name, Artist_Last_Name, Band_Name, Genre, Album_Art_File_Path 
    From Song, Album, Artist, Track_Number, Made 
    Where Song_OID = Track_Number.Song_OID_FK AND Album_OID=Track_Number.Album_OID_FK AND Album_OID=Made.Album_OID_FK AND Artist_OID=Made.Artist_OID_FK 
) as a 
LEFT OUTER JOIN (SELECT * FROM Song_Setting, user WHERE User_OID=User_OID_FK) AS b 
ON a.Song_OID=b.Song_OID_FK 

如果這對MySQL不起作用,我想你可能會留意使用臨時/內存表。所以考慮在MySQL中創建臨時表,創建臨時表與子查詢我在下面的CTE捕獲填充它,然後加入該到你的其他查詢。

如果這是SQL Server,您可以利用CTEs

下面的代碼只需拖放到一個視圖,它應該給你想要的東西。

WITH Home AS 
(
Select Song_OID, Song_Name, Album_Name, Artist_First_Name, Artist_Last_Name, Band_Name, Genre, Album_Art_File_Path 
From Song, Album, Artist, Track_Number, Made 
Where Song_OID = Track_Number.Song_OID_FK AND Album_OID=Track_Number.Album_OID_FK AND Album_OID=Made.Album_OID_FK AND Artist_OID=Made.Artist_OID_FK 
) 
Select DISTINCT * From Home 
LEFT OUTER JOIN (SELECT * FROM Song_Setting, user WHERE User_OID=User_OID_FK) AS UserSongs 
ON Song_OID=Song_OID_FK 
+0

爲了澄清,我正在使用MySQL。你有另一種方法可以與MySQL一起工作嗎? –

+0

現在編輯進一步想法,我知道這是MySQL的具體。 –