MSSQL JOIN 查询 - 'Value' 附近的语法不正确

MSSQL JOIN Query - Incorrect Syntax Near 'Value'

我有一个查询,但我没有看到语法或格式错误。

但是在执行时,SSMS 报告 'Value' 附近存在语法错误。

select * from sw.Users u 
join sw.Locations l 
join sw.Organizations o 
on u.LocationID = l.LocationID 
and l.OrganizationID = o.OrganizationID 
and o.OrganizationName = 'Value'

错误

Msg 102, Level 15, State 1, Line 38 Incorrect syntax near 'Value'.

尝试以下操作的结果:

select * from sw.Users u 
join sw.Locations l 
on u.LocationID = l.LocationID

为什么第一次连接查询报错?

您需要在每次加入后添加"on"。

select * from sw.Users u 
join sw.Locations l 
on u.LocationID = l.LocationID 
join sw.Organizations o 
on l.OrganizationID = o.OrganizationID 
where o.OrganizationName = 'Value'

查看here了解更多信息。

您的第一个连接缺少连接条件。 syntax 是:a JOIN b ON ...,而不仅仅是 a JOIN b

如果您要加入三个 table,则需要分两步完成,

(a JOIN b ON ...) JOIN c ON ...

a JOIN (b JOIN c ON ...) ON ...

请注意,括号是可选的,这可能是错误消息显示 "near Value" - SQL 服务器假定您打算使用第二种语法而错过了第二种语法的原因 ON 在你的声明的末尾。

第一种语法通常更容易阅读。就个人而言,我会将您的 SQL 声明写成如下:

SELECT * 
  FROM sw.Users AS u 
       INNER JOIN sw.Locations AS l ON u.LocationID = l.LocationID 
       INNER JOIN sw.Organizations AS o ON l.OrganizationID = o.OrganizationID 
 WHERE o.OrganizationName = 'Value'

每个 JOIN 行添加另一个 table,其 ON 子句描述旧结果集和新结果集 table 之间的 关系 。实际的过滤条件在 WHERE 子句中。

您需要在每个 (INNER)JOIN

后面使用 ON 关键字
SELECT  *
FROM    sw.Users            u
JOIN    sw.Locations        l   ON u.LocationID = l.LocationID 
JOIN    sw.Organizations    o   ON l.OrganizationID = o.OrganizationID
                                   AND o.OrganizationName = 'Value'

试试这样重组

select * from sw.Users u 
join sw.Locations l    on u.LocationID = l.LocationID 
join sw.Organizations o on
l.OrganizationID = o.OrganizationID 
and o.OrganizationName = 'Value'