2013-06-11 61 views
1

我有一个视图,下面有我想要显示的所有内容,但只有在每个表格中的特定影片都添加了所有内容时才会显示(如果这样做的话)。就像添加了电影一样,只有当副本,演员,角色和流派已经连接到该特定电影时,视图才会显示,但是如果没有为电影添加任何内容,它将不会显示。我是这个新东西,所以任何帮助将不胜感激。显示所有记录,即使为空

CREATE VIEW viewAllMovieDetails AS 
SELECT `tblMovie`.`MovieName`, `tblCopy`.`CpyEdition`, `tblCopy`.`CpyCondition`, 
     `tblCopy`.`CpyAmountPaid`, `tblCopy`.`CpyNote`, `tblMovie`.`MovieRating`, 
     `tblMovie`.`MovieLength`,`tblMovie`.`MovieYear`, `tblActor`.`ActLastName`, 
     `tblActor`.`ActFirstName`, `tblRole`.`Role`, `tblMovieGenre`.`GenGenre` 
FROM `tblCopy`, `tblMovie`, `tblActor`, `tblRole`, `tblMovieGenre`  
WHERE `tblCopy`.`MovieID` = `tblMovie`.`MovieID` AND `tblRole`.`MovieID` = `tblMovie`.`MovieID` 
    AND `tblRole`.`ActID` = `tblActor`.`ActID` AND `tblMovieGenre`.`MovieID` =     `tblMovie`.`MovieID`; 
+1

有一个看看这个:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of -sql-joins.html – fancyPants

回答

2

您应该使用LEFT JOIN。如果它们是NULL,它们将以这种类型的连接显示。

CREATE VIEW viewAllMovieDetails AS 
SELECT tblMovie.MovieName, tblCopy.CpyEdition, tblCopy.CpyCondition, 
     tblCopy.CpyAmountPaid, tblCopy.CpyNote, tblMovie.MovieRating, 
     tblMovie.MovieLength,tblMovie.MovieYear, tblActor.ActLastName, 
     tblActor.ActFirstName, tblRole.Role, tblMovieGenre.GenGenre 
FROM tblCopy 
LEFT JOIN tblMovie tm USING(MovieID) 
LEFT JOIN tblActor ta USING(ActID) 
LEFT JOIN tblRole tr ON tr.ActID = ta.ActID 
LEFT JOIN tblMovieGenre tg ON tg.MovieID = tm.MovieID; 

使用别名是很好的做法,以及;) 如果你把条件在你内心,而不是左联接。

+0

它给了我这个错误:错误代码:1054.'from子句'中的未知列'ActID'。 –

+0

没关系,我弄明白了!非常感谢! –

+0

CREATE VIEW viewAllMovieDetails AS SELECT tblMovie.MovieName,tblCopy.CpyEdition,tblCopy.CpyCondition, tblCopy.CpyAmountPaid,tblCopy.CpyNote,tblMovie.MovieRating, tblMovie.MovieLength,tblMovie.MovieYear,tblActor.ActLastName, tblActor.ActFirstName, tblRole.Role,tblMovieGenre.GenGenre FROM tblMovie LEFT JOIN tblCopy ON tblCopy.MovieID = tblMovie.MovieID LEFT JOIN tblRole ON tblMovie.MovieID = tblRole.MovieID LEFT JOIN tblActor ON tblActor.ActID = tblRole.ActID LEFT JOIN tblMovieGenre ON tblMovieGenre.MovieID = tblMovie.MovieID; –

2

使用 “左连接”,而不是 “其中”

CREATE VIEW viewAllMovieDetails AS 
SELECT `tblMovie`.`MovieName`, `tblCopy`.`CpyEdition`, `tblCopy`.`CpyCondition`, 
     `tblCopy`.`CpyAmountPaid`, `tblCopy`.`CpyNote`, `tblMovie`.`MovieRating`, 
     `tblMovie`.`MovieLength`,`tblMovie`.`MovieYear`, `tblActor`.`ActLastName`, 
     `tblActor`.`ActFirstName`, `tblRole`.`Role`, `tblMovieGenre`.`GenGenre` 
FROM `tblMovie` left join tblCopy on tblMovie.mouvieId=tblCopy.mouvieId ...etc