放入where子句后,SQL语句不起作用

mom*_*raw 1 sql sql-server sql-server-2005 sql-server-2008

SELECT     
   Event.Id, Event.Title, Event.StartDateTime, Event.DeadlineDate, 
   [File].ShortFileName, People.Initials
FROM         
   People 
INNER JOIN
   People2Event ON People.Id = People2Event.PeopleId 
RIGHT OUTER JOIN
   [File] 
INNER JOIN
   File2Event ON [File].Id = File2Event.FileId 
RIGHT OUTER JOIN
   Event ON File2Event.EventId = Event.Id ON People2Event.EventId = Event.Id
Run Code Online (Sandbox Code Playgroud)

我有这个声明它可以打印所有记录.下面不起作用,它与where函数的声明相同.有谁知道如何解决?

SELECT     
   Event.Id, Event.Title, Event.StartDateTime, Event.DeadlineDate, 
   [File].ShortFileName, People.Initials
FROM         
   People 
INNER JOIN
   People2Event ON People.Id = People2Event.PeopleId 
RIGHT OUTER JOIN
   [File] 
INNER JOIN
   File2Event ON [File].Id = File2Event.FileId 
RIGHT OUTER JOIN
   Event ON File2Event.EventId = Event.Id ON People2Event.EventId = Event.Id
WHERE 
   Event.ID = 8888
Run Code Online (Sandbox Code Playgroud)

Mic*_*son 7

编辑:

正如AndriyM所指出的那样,由于该条款中的条件位于该WHERE条款的右侧RIGHT OUTER JOIN,因此移至该条款ON将无效.OP发布了一个查询,其中只INNER JOIN包含他说解决了问题,所以他的查询肯定存在其他一些问题.


如果在WHERE子句中为一个表中添加一个过滤器OUTER JOIN,它将消除任何NULL行,从而有效地转换OUTER JOININNER JOIN.

而不是将条件放在您的WHERE条款中,将其移动到您的ON:

File2Event ON [File].Id = File2Event.FileId RIGHT OUTER JOIN
Event 
    ON File2Event.EventId = Event.Id 
    AND People2Event.EventId = Event.Id
    AND Event.ID = 8888
Run Code Online (Sandbox Code Playgroud)

另外,关于样式的提示,我将避免使用RIGHT JOIN,而是重新编写您的查询以使用LEFT JOIN...这通常使逻辑更容易遵循.