sql - 如何找出语法错误?

标签 sql sql-server

我正在尝试编写一个 SQL 查询,但它不断出现语法错误。问题是,错误消息对我根本没有帮助。

这是查询:

SELECT * 
FROM
   (SELECT     
        dbo.ciqCompanyUltimateParent.ultimateParentCompanyId, 
        COUNT(DISTINCT dbo.ciqCompany.companyId) AS Subsidiaries_Count, 
        COUNT(DISTINCT dbo.ciqCountryGeo.countryId) AS Countries_Count
    FROM         
        dbo.ciqCompanyUltimateParent 
    INNER JOIN
        dbo.ciqCompany ON dbo.ciqCompanyUltimateParent.companyId = dbo.ciqCompany.companyId  
    INNER JOIN
        dbo.ciqCountryGeo ON dbo.ciqCompany.countryId = dbo.ciqCountryGeo.countryId
    GROUP BY 
        dbo.ciqCompanyUltimateParent.ultimateParentCompanyId
     )
INNER JOIN 
    dbo.ciqCompany ON ultimateParentCompanyId = dbo.ciqCompany.companyId 

当我执行它时,括号中的内容工作正常(即它执行并返回一个表)。但是,最后一个 INNER JOIN 给出了以下错误:

Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'INNER'.

更糟糕的是,当我将上面的语句删减为

SELECT * 
FROM
    (SELECT     
        dbo.ciqCompanyUltimateParent.ultimateParentCompanyId, 
        COUNT(DISTINCT dbo.ciqCompany.companyId) AS Subsidiaries_Count, 
        COUNT(DISTINCT dbo.ciqCountryGeo.countryId) AS Countries_Count
     FROM         
        dbo.ciqCompanyUltimateParent 
     INNER JOIN
        dbo.ciqCompany ON dbo.ciqCompanyUltimateParent.companyId = dbo.ciqCompany.companyId 
     INNER JOIN
        dbo.ciqCountryGeo ON dbo.ciqCompany.countryId = dbo.ciqCountryGeo.countryId
     GROUP BY 
        dbo.ciqCompanyUltimateParent.ultimateParentCompanyId
    )

我遇到了类似的错误 -

Msg 102, Level 15, State 1, Line 9
Incorrect syntax near ')'.

为什么我无法从运行良好的查询中选择 *?

最佳答案

尝试为子查询添加别名。例如

SELECT * FROM
(
 ....
) SUB
INNER JOIN dbo.ciqCompany 
ON SUB.ultimateParentCompanyId = dbo.ciqCompany.companyId 

关于sql - 如何找出语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20707638/

相关文章:

sql - 更新 sql 表中的特定行

c# - 将整数和字符串插入 SQL Server 数据库的问题 c#

sql-server - 编码选项 CODEPAGE 不适用于 SQL Server 中的 OPENROWSET

sql-server - 恢复后的 Datazen 服务器未准备好

sql - 我可以根据表中的值返回一个字符串吗?

sql - 处理这个 sql 逻辑的更好方法是什么?

mysql - SQL SUMPRODUCT 有一个扭曲

sql - SQL 导航器中的 "with... as"

sql - 如何根据列过滤器缩小不同行的范围?

sql-server - T-SQL 的 CTE 性能不佳