加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长百科 > 正文

如何构造此Oracle SQL查询?

发布时间:2021-01-17 08:05:34 所属栏目:站长百科 来源:网络整理
导读:我在Oracle中编写一个sql查询,如下所示: SELECT * FROM ( SELECT testid,max(decode(name,'longitude',stringvalue,NULL)) as longitude,'latitude',NULL)) as latitude FROM test_av GROUP BY testid ) av INNER JOIN ( SELECT id,((ACOS( SIN(16.15074 *

我在Oracle中编写一个sql查询,如下所示:

SELECT *
   FROM ( SELECT testid,max(decode(name,'longitude',stringvalue,NULL)) as longitude,'latitude',NULL)) as latitude
            FROM test_av 
           GROUP  BY testid
        ) av
  INNER JOIN ( 
                  SELECT id,((ACOS(
                                 SIN(16.15074 * 3.141592653 / 180) 
                                 * SIN(latitude * 3.141592653 / 180) 
                                 + COS(16.15074 * 3.141592653 / 180) 
                                 * COS(latitude * 3.141592653 / 180)
                                 * COS((-22.74426 - longitude)*3.141592653 / 180)
                          )*6373)) as distance
                    FROM test 

        ) t ON t.id = av.testid
  WHERE t.distance <= 100

当我执行此查询时,Oracle会说’经度无效标识符’.我试图访问子查询别名,但查询失败.

如何将一个子查询的“别名”访问到另一个子查询?

解决方法

如果我正确理解你想要做什么,你实际上并不需要INNER JOIN,因为你没有从测试中获取任何真实的信息,而这些信息还没有在test_av上.所以,你可以写:

SELECT *
  FROM ( SELECT id,longitude,latitude,((ACOS( SIN(16.15074 * 3.141592653 / 180)
                        * SIN(latitude * 3.141592653 / 180)
                        + COS(16.15074 * 3.141592653 / 180)
                        * COS(latitude * 3.141592653 / 180)
                        * COS((-22.74426 - longitude) * 3.141592653 / 180)
                )*6373)) AS distance
           FROM ( SELECT testid AS id,NULL)) as latitude
                    FROM test_av
                   GROUP
                      BY testid
                )
       )
 WHERE distance <= 100
;

如果你想明确地确保你只获得测试中存在的记录 – 也就是说,如果你在test_av中有没有测试父项的记录,并且你想要过滤那些 – 那么你可以在最里面处理子查询,在您的FROM test_av之后.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读