错误消息 - 消息 156,级别 15,状态 1,关键字 'WHERE' 附近的语法不正确
Error Message - Msg 156, Level 15, State 1, Incorrect syntax near the keyword 'WHERE'
我在尝试执行下面的 SQL 语句时 运行 遇到错误。不确定 WHERE 周围是否需要另一个保留字或括号,但我 运行 没主意了。
我收到错误消息——“消息 156,级别 15,状态 1,第 20 行
关键字 'WHERE'."
附近的语法不正确
谁能帮我解决这个错误?
提前致谢!
SELECT dbo.PURCHASING_DETAIL.ID
,dbo.SCA_SS_INVOICELINESALL.*
,dbo.SCA_SS_INVOICESALL.*
,dbo.PURCHASING_DETAIL.QUOTEDPRICE
,dbo.PURCHASING_DETAIL.GLACCT
,dbo.PURCHASING_DETAIL.[PO DATE]
FROM dbo.PURCHASING_DETAIL
INNER JOIN (
(
dbo.SCA_SS_INVOICELINESALL INNER JOIN dbo.SCA_SS_INVOICESALL ON dbo.SCA_SS_INVOICELINESALL.INVOICESALLID = dbo.SCA_SS_INVOICESALL.INVOICESALLID
) INNER JOIN dbo.PURCHASING_DETAIL ON (dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM)
AND (dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM)
)
INNER JOIN dbo.SCA_SS_LOCATION ON (dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID)
AND (dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID)
WHERE (dbo.PURCHASING_DETAIL.[6DIGIT] = '50002')
AND DATEDIFF(month, [PO DATE], GETDATE()) <= 12
您的查询中有一些不必要的 JOIN(例如重复的 INNER JOIN dbo.PURCHASING_DETAIL
)和一些无用的括号。试试这个:
SELECT dbo.PURCHASING_DETAIL.ID,
dbo.SCA_SS_INVOICELINESALL.*,
dbo.SCA_SS_INVOICESALL.*,
dbo.PURCHASING_DETAIL.QUOTEDPRICE,
dbo.PURCHASING_DETAIL.GLACCT,
dbo.PURCHASING_DETAIL.[PO DATE]
FROM dbo.PURCHASING_DETAIL
JOIN dbo.SCA_SS_INVOICELINESALL
ON dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM
JOIN dbo.SCA_SS_INVOICESALL
ON dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM
JOIN dbo.SCA_SS_LOCATION
ON dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID AND
dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID
WHERE dbo.PURCHASING_DETAIL.[6DIGIT] = '50002'
AND DATEDIFF(month,[PO DATE], GETDATE()) <= 12
您还有一些 JOIN 表达式引用了不在联接中的表。这些可能应该在 WHERE 子句中。它会工作,但它真的很难阅读。
我也同意你应该删除所有括号。
此外,正如我在评论中提到的,您 Purchasing_Detail 两次。
试试这个:
SELECT dbo.PURCHASING_DETAIL.ID,
dbo.SCA_SS_INVOICELINESALL.*,
dbo.SCA_SS_INVOICESALL.*,
dbo.PURCHASING_DETAIL.QUOTEDPRICE,
dbo.PURCHASING_DETAIL.GLACCT,
dbo.PURCHASING_DETAIL.[PO DATE]
FROM dbo.SCA_SS_INVOICELINESALL
INNER JOIN dbo.SCA_SS_INVOICESALL
ON dbo.SCA_SS_INVOICELINESALL.INVOICESALLID = dbo.SCA_SS_INVOICESALL.INVOICESALLID
INNER JOIN dbo.PURCHASING_DETAIL
ON dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM
INNER JOIN dbo.SCA_SS_LOCATION
ON (dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID)
WHERE (dbo.PURCHASING_DETAIL.[6DIGIT] = '50002')
AND (dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM)
AND (dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID)
AND DATEDIFF(month,[PO DATE], GETDATE()) <= 12
我在尝试执行下面的 SQL 语句时 运行 遇到错误。不确定 WHERE 周围是否需要另一个保留字或括号,但我 运行 没主意了。
我收到错误消息——“消息 156,级别 15,状态 1,第 20 行 关键字 'WHERE'."
附近的语法不正确谁能帮我解决这个错误?
提前致谢!
SELECT dbo.PURCHASING_DETAIL.ID
,dbo.SCA_SS_INVOICELINESALL.*
,dbo.SCA_SS_INVOICESALL.*
,dbo.PURCHASING_DETAIL.QUOTEDPRICE
,dbo.PURCHASING_DETAIL.GLACCT
,dbo.PURCHASING_DETAIL.[PO DATE]
FROM dbo.PURCHASING_DETAIL
INNER JOIN (
(
dbo.SCA_SS_INVOICELINESALL INNER JOIN dbo.SCA_SS_INVOICESALL ON dbo.SCA_SS_INVOICELINESALL.INVOICESALLID = dbo.SCA_SS_INVOICESALL.INVOICESALLID
) INNER JOIN dbo.PURCHASING_DETAIL ON (dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM)
AND (dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM)
)
INNER JOIN dbo.SCA_SS_LOCATION ON (dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID)
AND (dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID)
WHERE (dbo.PURCHASING_DETAIL.[6DIGIT] = '50002')
AND DATEDIFF(month, [PO DATE], GETDATE()) <= 12
您的查询中有一些不必要的 JOIN(例如重复的 INNER JOIN dbo.PURCHASING_DETAIL
)和一些无用的括号。试试这个:
SELECT dbo.PURCHASING_DETAIL.ID,
dbo.SCA_SS_INVOICELINESALL.*,
dbo.SCA_SS_INVOICESALL.*,
dbo.PURCHASING_DETAIL.QUOTEDPRICE,
dbo.PURCHASING_DETAIL.GLACCT,
dbo.PURCHASING_DETAIL.[PO DATE]
FROM dbo.PURCHASING_DETAIL
JOIN dbo.SCA_SS_INVOICELINESALL
ON dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM
JOIN dbo.SCA_SS_INVOICESALL
ON dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM
JOIN dbo.SCA_SS_LOCATION
ON dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID AND
dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID
WHERE dbo.PURCHASING_DETAIL.[6DIGIT] = '50002'
AND DATEDIFF(month,[PO DATE], GETDATE()) <= 12
您还有一些 JOIN 表达式引用了不在联接中的表。这些可能应该在 WHERE 子句中。它会工作,但它真的很难阅读。
我也同意你应该删除所有括号。
此外,正如我在评论中提到的,您 Purchasing_Detail 两次。
试试这个:
SELECT dbo.PURCHASING_DETAIL.ID,
dbo.SCA_SS_INVOICELINESALL.*,
dbo.SCA_SS_INVOICESALL.*,
dbo.PURCHASING_DETAIL.QUOTEDPRICE,
dbo.PURCHASING_DETAIL.GLACCT,
dbo.PURCHASING_DETAIL.[PO DATE]
FROM dbo.SCA_SS_INVOICELINESALL
INNER JOIN dbo.SCA_SS_INVOICESALL
ON dbo.SCA_SS_INVOICELINESALL.INVOICESALLID = dbo.SCA_SS_INVOICESALL.INVOICESALLID
INNER JOIN dbo.PURCHASING_DETAIL
ON dbo.SCA_SS_INVOICELINESALL.SUPPARTNUM = dbo.PURCHASING_DETAIL.SUPPARTNUM
INNER JOIN dbo.SCA_SS_LOCATION
ON (dbo.SCA_SS_INVOICESALL.SHIPTOADDRID = dbo.SCA_SS_LOCATION.LOCATIONID)
WHERE (dbo.PURCHASING_DETAIL.[6DIGIT] = '50002')
AND (dbo.SCA_SS_INVOICESALL.INVOICENUMBER = dbo.PURCHASING_DETAIL.INVOICENUM)
AND (dbo.PURCHASING_DETAIL.FACILITY = dbo.SCA_SS_LOCATION.FACILITYID)
AND DATEDIFF(month,[PO DATE], GETDATE()) <= 12