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之后.
总结以上是内存溢出为你收集整理的如何构造此Oracle SQL查询?全部内容,希望文章能够帮你解决如何构造此Oracle SQL查询?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)