首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于视图的从句不按联接顺序出现

关于视图的从句不按联接顺序出现
EN

Stack Overflow用户
提问于 2014-08-22 22:44:34
回答 1查看 57关注 0票数 1

在SSMS 2012中,我将看到在MS中创建的一个大视图。当我将视图脚本到查询窗口时,FROM子句如下所示:

代码语言:javascript
复制
FROM         dbo.oa_projecttask_type RIGHT OUTER JOIN
    dbo.oa_project_task RIGHT OUTER JOIN
    dbo.[Functional Area] RIGHT OUTER JOIN
    dbo.oa_category ON dbo.[Functional Area].[Product Code] = dbo.oa_category.name RIGHT OUTER JOIN
    dbo.oa_project RIGHT OUTER JOIN
    dbo.vw_People_All_Ever RIGHT OUTER JOIN
    dbo.oa_task ON dbo.vw_People_All_Ever.[User ID] = dbo.oa_task.user_id ON dbo.oa_project.id = dbo.oa_task.project_id ON 
    dbo.oa_category.id = dbo.oa_task.category_id ON dbo.oa_project_task.id = dbo.oa_task.project_task_id ON 
    dbo.oa_projecttask_type.id = dbo.oa_task.projecttask_type_id LEFT OUTER JOIN
    dbo.upl_approval_status RIGHT OUTER JOIN
    dbo.oa_timesheet ON dbo.upl_approval_status.Code = dbo.oa_timesheet.status ON dbo.oa_task.timesheet_id = dbo.oa_timesheet.id
WHERE     (CONVERT(datetime, oa_task.created) > GETDATE() - 366) AND (oa_task.deleted IS NULL)

当我格式化子句以使联接和ON's位于单独的行时,它看起来如下所示:

代码语言:javascript
复制
FROM oa_projecttask_type 
   RIGHT OUTER JOIN oa_project_task 
   RIGHT OUTER JOIN [Functional Area] 
   RIGHT OUTER JOIN oa_category 
      ON [Functional Area].[Product Code] = oa_category.name 
   RIGHT OUTER JOIN oa_project 
   RIGHT OUTER JOIN vw_People_All_Ever 
   RIGHT OUTER JOIN oa_task 
      ON vw_People_All_Ever.[User ID] = oa_task.user_id 
      ON oa_project.id = oa_task.project_id 
      ON oa_category.id = oa_task.category_id 
      ON oa_project_task.id = oa_task.project_task_id 
      ON oa_projecttask_type.id = oa_task.projecttask_type_id 
   LEFT OUTER JOIN upl_approval_status 
   RIGHT OUTER JOIN oa_timesheet 
      ON upl_approval_status.Code = oa_timesheet.status 
      ON oa_task.timesheet_id = oa_timesheet.id
WHERE     (CONVERT(datetime, oa_task.created) > GETDATE() - 366) AND (oa_task.deleted IS NULL)

许多联接没有ON语句,但是视图编译和返回数据时没有错误。没有ON子句的右外联接意味着什么--它是笛卡儿连接吗?

更新:基于这个问题-- Wierd SQL Server view definition --以及它的链接,我们不能简单地将联接/ONs重新排列成更合理的顺序--顺序会影响检索的逻辑。我将用更容易理解的逻辑重写这个查询。感谢马汀史密斯和所有的人!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-22 22:52:23

如果你再检查一遍,你会发现每个Right Outer Join都有他的ON语句,只是没有。

我猜所有joins都会找到自己的ON,因为ON语句是RIGHT/LEFT Outer Join正常工作所必需的。

有关这个主题的更多信息,您可以找到HERE,正如Martin Smith在评论中所写的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25456568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档