【问题标题】:"Invalid column name" error in SQLSQL 中的“列名无效”错误
【发布时间】:2016-08-16 23:21:05
【问题描述】:

这段代码有什么问题?

我得到这个错误:

列名“距离”无效

代码:

SELECT 
    Company.CompanyId as Id,
    ( 6371  * acos( cos( radians(47.8423155) ) * cos( radians( Company.Latitude  ) ) * cos( radians( Company.Longitude  ) - radians(35.232933) ) + sin( radians(47.8423155) ) * sin( radians( Company.Latitude ) ) ) ) AS Distance
FROM 
    Company 
INNER JOIN  
    Product ON Company.CompanyId = Product.CompanyId 
WHERE
    Distance< 5000   
ORDER BY
    Distance

【问题讨论】:

标签: sql sql-server select group-by where


【解决方案1】:

根据您使用的,某些RDBMS 不允许引用whereorder by 列中的列别名。只需使用实际的列名:

SELECT      Company.CompanyId as Id,
            Company.VisitCount AS myVisitCount 
FROM        Company
INNER JOIN  Product ON  Company.CompanyId = Product.CompanyId 
WHERE       Company.VisitCount < 5000   
ORDER BY    Company.VisitCount

【讨论】:

  • 你是对的,但是我有更新我的问题,请看这个距离:|
  • @user5740086 同样的原则仍然适用
  • 我想返回距离,所以你说在选择和哪里都使用“(6371........)”,这通常吗?
  • @user5740086 可以。另一种方法是在 subqeury 中进行计算,并在外部查询中应用 whereorder by 子句。
  • 它的作品,但使用两次,是正常的? "( 6371 * acos( cos( 弧度(47.8423155) ) * cos( 弧度( Company.Latitude ) ) * cos( 弧度( Company.Longitude ) - 弧度(35.232933) ) + sin( 弧度(47.8423155) ) * sin( 弧度(公司.纬度))))"
【解决方案2】:

将选择包裹在子选择中

   select * from(SELECT 
    Company.CompanyId as Id,
    ( 6371  * acos( cos( radians(47.8423155) ) * cos( radians( Company.Latitude  ) ) * cos( radians( Company.Longitude  ) - radians(35.232933) ) + sin( radians(47.8423155) ) * sin( radians( Company.Latitude ) ) ) ) AS Distance
FROM 
    Company 
INNER JOIN  
    Product ON (Company.CompanyId = Product.CompanyId) 
) AS P
WHERE
    P.Distance< 5000   
ORDER BY
    P.Distance;

内部子查询返回您使用别名距离进行过滤的函数。

【讨论】:

  • 看来你是对的,但我得到了一个错误:“关键字'WHERE'附近的语法不正确。”
  • 可能是不正确的括号。等待。立即试用
  • 使用了别名。希望这能解决问题。 Oracle 和 SQL Server 的语法存在一些别名相关的差异。
  • 仍然从某处得到-1 :-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多