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)
编辑:
正如AndriyM所指出的那样,由于该条款中的条件位于该WHERE
条款的右侧RIGHT OUTER JOIN
,因此移至该条款ON
将无效.OP发布了一个查询,其中只INNER JOIN
包含他说解决了问题,所以他的查询肯定存在其他一些问题.
如果在WHERE
子句中为一个表中添加一个过滤器OUTER JOIN
,它将消除任何NULL
行,从而有效地转换OUTER JOIN
为INNER 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
...这通常使逻辑更容易遵循.
归档时间: |
|
查看次数: |
214 次 |
最近记录: |