为什么这个内连接SQL块失败?

时间:2013-02-04 20:04:02

标签: sql-server-2008 join inner-join

运行此incorrect syntax near as时收到inner join。需要确定原因和不能。请指出出错的地方:

相关SQL代码

from 

(   
    (
        (dbo.task inner join dbo.projwbs on dbo.task.proj_id=dbo.projwbs.wbs_id) as tmptb1
    inner join
        (dbo.task inner join dbo.project on dbo.task.proj_id=dbo.project.proj_id) as tmptb2
        on dbo.tmptb1.proj_id=dbo.tmptb2.proj_id as dbo.tmptb3
    )
    inner join
(
        (dbo.task inner join dbo.rsrc on dbo.task.rsrc_id=dbo.rsrs.rsrc_id) as tmptb4)
        on tmptb3.proj_id=tmptb4.proj_id
    )

2 个答案:

答案 0 :(得分:3)

您的代码看起来有太多括号,但很难准确说出您在做什么。所以我会改变它以使用类似的东西:

select *
from 
(
    select *
    from
    (   
        select *
        FROM dbo.task 
        inner join dbo.projwbs 
            on dbo.task.proj_id=dbo.projwbs.wbs_id
    ) as tmptb1
    inner join
    (
        select *
        from dbo.task 
        inner join dbo.project 
            on dbo.task.proj_id=dbo.project.proj_id
    ) as tmptb2
        on tmptb1.proj_id=tmptb2.proj_id
) as tmptb3
inner join
(
    select *
    from dbo.task 
    inner join dbo.rsrc 
        on dbo.task.rsrc_id=dbo.rsrs.rsrc_id
) as tmptb4
    on tmptb3.proj_id=tmptb4.proj_id

SELECT *替换为您希望从每个表中添加的列。

我不确定你为什么要做所有这些子查询来获取数据,你应该可以使用:

select *
from dbo.task t
inner join dbo.projwbs w
  on t.proj_id=w.wbs_id
inner join dbo.project p
  on t.proj_id=p.proj_id
inner join dbo.rsrc r
  on t.rsrc_id = r.rsrc_id

答案 1 :(得分:3)

我可能会遗漏一些东西......但由于这些都是inner joins,我不确定这些块会给你一个简化版本也不会这样做:

from 
    dbo.task t
    inner join dbo.projwbs pw on t.proj_id=pw.wbs_id 
    inner join dbo.project p on t.proj_id=p.proj_id
    inner join dbo.rsrc r on t.rsrc_id=r.rsrc_id