首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >询问有无和在何处

询问有无和在何处
EN

Stack Overflow用户
提问于 2011-01-10 02:15:31
回答 5查看 10.3K关注 0票数 3

我正在尝试创建一个将合并以下两个查询的查询。

代码语言:javascript
复制
SELECT 
  campgroundid, 
  ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * 
    cos( radians( lng ) - radians(-122) ) + 
    sin( radians(37) ) * sin( radians( lat ) ) ) ) 
  AS distance 
FROM campground 
HAVING distance < 25 
ORDER BY distance LIMIT 0 , 20;

SELECT * FROM campground WHERE type='private' AND wifi = 1

我试着将它们放入IN中,但它返回了一个语法错误,我不知道如何修复。我只是尝试删除已有查询和合并查询,但是它说它无法确定distance是什么。任何帮助都是非常感谢的。谢谢。

输出:大本营,名称,类型,wifi,距离2,夏令营XYZ,私人,1,4.44英里

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-10 02:24:28

在未提供的信息中,露营地和标记表是如何相互关联的。我们需要这些信息才能知道如何加入这些表格。

同时,还需要GROUP (它的操作类似于GROUP聚合结果上的WHERE子句)。如果不是在标记中聚合行,则需要在哪里,而不是有。

据猜测,你想要这样的东西:

代码语言:javascript
复制
 SELECT id (expression) as distance FROM markers
      WHERE distance < 25 AND 
        campground_id IN (SELECT id FROM campgrounds WHERE type = 'private' AND wifi = 1)

编辑:反映只有一个表的新信息。

不能在WHERE子句中使用列ALIASes。我猜你知道这一点,也知道你可以用它们来拥有,这就是为什么你试图用它来代替它。要做到这一点,您必须通过查询将其重写为一个组:

代码语言:javascript
复制
SELECT campgroundid, name, private, wifi, 
   ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * 
    cos( radians( lng ) - radians(-122) ) + 
    sin( radians(37) ) * sin( radians( lat ) ) ) ) 
    AS distance 
FROM campground 
GROUP BY campgroundid 
HAVING distance < 25 AND type='private' AND wifi = 1
ORDER BY distance LIMIT 0 , 20;

只要营地是唯一的(因为其他值将来自这个id的唯一记录),这就可以工作了。

票数 3
EN

Stack Overflow用户

发布于 2011-01-10 02:23:49

它看起来应该是WHERE distance < 25,因为它适用于查询,如HAVING MAX(distance) < 25和其他聚合函数。

票数 0
EN

Stack Overflow用户

发布于 2011-01-10 02:35:34

我想这是值得一试的(只需将where子句从第二个sql添加到第一个)

代码语言:javascript
复制
SELECT 
  ... AS distance 
FROM campground 
WHERE type='private' AND wifi = 1
HAVING distance < 25 
ORDER BY distance LIMIT 0 , 20;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4643178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档