[英]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.