繁体   English   中英

连接查询SQL中的语法错误

[英]Incorrect syntax error in join query sql

我有以下查询。

with getstock as 
(
    select 
        a.bomparent, a.bomchild, a.bomqty, a.bompos, a.baltmethod, a.bomissue
    from 
        bom a
    where 
        bomparent = 'QZ10-0262601' and baltmethod = '1'

    union all

    select 
        parent.bomparent, parent.bomchild, parent.bomqty, parent.bompos, parent.baltmethod, parent.bomissue 
    from 
        getstock as a
    inner join 
        bom as parent, stock as s on parent.bomparent = a.bomchild
    where 
        parent.baltmethod = '1' and parent.bomparent = s.stocknum
)
select  *
from getstock

运行它时,出现以下错误。

Msg 102,第15级,状态1,第9行
','附近的语法不正确。

问题出在哪里?

您不能在JOIN使用多个表。 FROM有可能,但我不建议这样做。 那是旧式的JOIN语法。 您应该使用显式JOIN重写查询:

with getstock as 
(
    select 
        a.bomparent, a.bomchild, a.bomqty, a.bompos, a.baltmethod, a.bomissue
    from 
        bom a
    where 
        bomparent = 'QZ10-0262601' and baltmethod = '1'

    union all

    select 
        parent.bomparent, parent.bomchild, parent.bomqty, parent.bompos, parent.baltmethod, parent.bomissue 
    from 
        getstock as a
    inner join 
        bom as parent on parent.bomparent = a.bomchild
    inner join 
        stock as s on parent.bomparent = s.stocknum
    where 
        parent.baltmethod = '1'
)
select  *
from getstock

有关更多阅读: 避免使用旧式的JOIN语法。

with getstock as 
(
    select a.bomparent, a.bomchild, a.bomqty, a.bompos,
    a.baltmethod, a.bomissue
    from bom a
    where bomparent = 'QZ10-0262601' and baltmethod = '1'
    union all
    select parent.bomparent, parent.bomchild, parent.bomqty,
    parent.bompos,  parent.baltmethod, parent.bomissue 
    from getstock as a
    inner join bom as parent
     on parent.bomparent = a.bomchild
    inner join stock as s
     parent.bomparent = s.stocknum
   where parent.baltmethod = '1' 
)
select  *
from getstock

您还可以使用以下适当的联接重写查询,以选择带有union的全部:

SELECT        bomparent, bomchild, bomqty, bompos, baltmethod, bomissue
FROM            bom AS a
WHERE        (bomparent = 'QZ10-0262601') AND (baltmethod = '1')

    union all


SELECT        bom.bomparent, bom.bomchild, bom.bomqty, bom.bompos, bom.baltmethod, bom.bomissue
FROM            getstock INNER JOIN
                         bom ON getstock.bomchild = bom.bomparent INNER JOIN
                         stock ON bom.bomparent = stock.stocknum
WHERE        (bom.baltmethod = N'1')

遵循代码应该可以,但是不能遵循最佳实践。 始终正确使用连接条件(INNER JOIN ... ON)。

with getstock as 
(
    select a.bomparent, a.bomchild, a.bomqty, a.bompos, a.baltmethod, a.bomissue
    from bom a
    where bomparent = 'QZ10-0262601' and baltmethod = '1'
    union all

    select parent.bomparent, parent.bomchild, parent.bomqty, parent.bompos, parent.baltmethod, parent.bomissue 
    from getstock as a,
        bom as parent, 
        stock as s  
    where parent.bomparent = a.bomchild and
        parent.baltmethod = '1' and parent.bomparent = s.stocknum
)
select  * from getstock

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM