热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

无法识别SQL作为关键字-SQLaskeywordisnotrecognized

Imeditingastoredproceduretogetthedistanceandthesortitfromthat.ThequeryImusingis

I'm editing a stored procedure to get the distance and the sort it from that. The query I'm using is working on another stored procedure.

我正在编辑存储过程以获取距离并从中进行排序。我正在使用的查询正在处理另一个存储过程。

    SELECT  *,


( 
    ACOS( COS( RADIANS( 41.993000000  ) ) 
          * COS( RADIANS( u.real_users_lat ) )
          * COS( RADIANS( u.real_users_long ) - RADIANS( -87.696207000 ) )
          + SIN( RADIANS( 41.993000000  ) )
          * SIN( RADIANS( u.real_users_lat ) )
      )
    * 6371
    ) AS distance_in_km

FROM products
LEFT JOIN users u on u.id = products.created_by
LEFT JOIN product_categories on product_categories.product_id = products.id
WHERE products.starting_bid <= @price and product_categories.category_id = @category_id
ORDER BY 
     CASE WHEN @sort_direction = 'asc' THEN products.date_created END asc,
     CASE WHEN @sort_direction = 'desc' THEN products.date_created END desc,
    CASE WHEN @sort_distance = 'nearest' THEN distance_in_km END desc,
    CASE WHEN @sort_distance = 'farthest' THEN distance_in_km END asc

END

The error is Invalid column name 'distance_in_km'. but on my other stored procedure here it is working.

错误是无效的列名称'distance_in_km'。但在我的其他存储过程中它正在工作。

SELECT 
    distinct Products.*, 
    (
        SELECT Count(bids.id) 
        FROM bids
        Where bids.product_id = products.id
    ) as bid_count ,
    (
    SELECT firebase_user_id
    FROM Users
    Where Users.id = created_by
    ) as seller_firebase_id , 
    ( 
    ACOS( COS( RADIANS( 41.993000000  ) ) 
          * COS( RADIANS( u.real_users_lat ) )
          * COS( RADIANS( u.real_users_long ) - RADIANS( -87.696207000 ) )
          + SIN( RADIANS( 41.993000000  ) )
          * SIN( RADIANS( u.real_users_lat ) )
      )
    * 6371
    ) AS distance_in_km


FROM Products
LEFT JOIN areas on areas.id = products.area
LEFT JOIN Product_categories on Product_categories.product_id = products.id
LEFT JOIN Users u on u.id = Products.created_by 
WHERE products.status <> 4 
ORDER BY distance_in_km DESC


END

Please let me know what I'm doing wrong.

请让我知道我做错了什么。

2 个解决方案

#1


1  

You're not doing anything wrong. SQL server simply does not allow the aliased column to be used in that way. A straight WHERE is ok, but you cannot use them in expressions.

你没有做错任何事。 SQL服务器根本不允许以这种方式使用别名列。直接WHERE是好的,但你不能在表达式中使用它们。

Don't ask me why!

别问我原因!

If you need to do this then wrap your SELECT statement in a CTE or inline view and it will work fine.

如果您需要这样做,那么将您的SELECT语句包装在CTE或内联视图中,它将正常工作。

There's also an extra END at the end; perhaps that's just a copy-and-paste problem with the question, though.

最后还有一个额外的END;或许这只是问题的复制和粘贴问题。

This should be close using an inline view

这应该使用内联视图关闭

SELECT  *,distance_in_km
FROM products
LEFT JOIN 
(select *, ( 
    ACOS( COS( RADIANS( 41.993000000  ) ) 
          * COS( RADIANS( u.real_users_lat ) )
          * COS( RADIANS( u.real_users_long ) - RADIANS( -87.696207000 ) )
          + SIN( RADIANS( 41.993000000  ) )
          * SIN( RADIANS( u.real_users_lat ) )
      )
    * 6371
    ) AS distance_in_km
from users) u on u.id = products.created_by
LEFT JOIN product_categories on product_categories.product_id = products.id
WHERE products.starting_bid <= @price and product_categories.category_id = @category_id
ORDER BY 
     CASE WHEN @sort_direction = 'asc' THEN products.date_created END asc,
     CASE WHEN @sort_direction = 'desc' THEN products.date_created END desc,
    CASE WHEN @sort_distance = 'nearest' THEN distance_in_km END desc,
    CASE WHEN @sort_distance = 'farthest' THEN distance_in_km END asc

Eralper's answer Shows the CTE general technique.

Eralper的答案显示了CTE的一般技术。

#2


0  

Jovin, you cannot use a computed column directly in the SQL it is created

Jovin,你不能直接在它创建的SQL中使用计算列

I mean, following will not work

我的意思是,以下将无法奏效

declare @sort varchar(5) = 'desc'
select [name], trim([name]) as tname
from sys.tables
order by 
    case when @sort = 'desc' then tname end desc,
    case when @sort = 'asc' then tname end asc

You can do one of the following

您可以执行以下操作之一

declare @sort varchar(5) = 'desc'
select [name], trim([name]) as tname
from sys.tables
order by 
    case when @sort = 'desc' then trim([name]) end desc,
    case when @sort = 'asc' then trim([name]) end asc

Or just use SQL CTE expression

或者只使用SQL CTE表达式

declare @sort varchar(5) = 'desc'
;with cte as (
    select [name], trim([name]) as tname
    from sys.tables
) 
select *
from cte
order by 
    case when @sort = 'desc' then tname end desc,
    case when @sort = 'asc' then tname end asc

推荐阅读
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 英语面试技巧:提升个人技能与表现
    在英语面试中,个人技能是指除专业知识外,能够促进职业发展的各种能力。虽然你可能具备多种技能,但建议重点突出与目标岗位最相关的几项,以增强面试官对你专业能力和适应性的认可。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • C#编程指南:实现列表与WPF数据网格的高效绑定方法 ... [详细]
author-avatar
woodburger_821
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有