【发布时间】:2013-12-20 16:11:29
【问题描述】:
我正在尝试编写一个不断给我语法错误的 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 给了我以下错误:
消息 156,第 15 级,状态 1,第 10 行
关键字“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
)
我收到类似的错误 -
消息 102,第 15 级,状态 1,第 9 行
')' 附近的语法不正确。
为什么我不能从运行良好的查询中选择 *?
【问题讨论】:
-
Incorrect syntax near INNER是由于子查询中缺少别名。您必须为FROM子句中的第一个子查询赋予它自己的别名。 -
您必须使用别名来命名子查询。
-
仅供参考,“SQL”不是数据库产品的名称。
标签: sql sql-server