2010-05-22 104 views
0

我有一个SQL查询执行2个表中的某些列不明确的左连接。我可以在连接的表格的前面加上前缀,但是当我尝试在FROM子句中从表格的前面添加一列时,它会告诉我未知列。我甚至试图给这个表一个别名像这样...从点AS p和使用“p”表前缀表,但是也没有工作。有人能告诉我我做错了什么吗?这里是我的查询:表别名 - 字段列表中的未知列

SELECT point_title, point_url, address, city, state, zip_code, 
    phone, `points`.`lat`, `points`.`longi`, featured, 
    kmlno, image_url, category.title, category_id, 
    point_id, lat, longi, reviews.star_points, reviews.review_id, 
    count(reviews.point_id) as totals 
FROM (SELECT *, 
      (3959 * acos(cos(radians('37.7717185')) * cos(radians(lat)) 
       * cos(radians(longi) - radians('-122.4438929')) 
       + sin(radians('37.7717185')) * sin(radians(lat)))) AS distance 
     FROM points 
     HAVING distance < '25') as distResults 
LEFT JOIN category USING (category_id) 
LEFT JOIN reviews USING (point_id) 
    WHERE (point_title LIKE '%Playgrounds%' OR category.title LIKE '%Playgrounds%') 
GROUP BY point_id 
ORDER BY totals DESC, distance 
    LIMIT 0, 10 

这里是所涉及的表的模式:

积分表: 字段类型Null默认注释 point_id INT(11)否
point_title VARCHAR(255)无
CATEGORY_ID INT(11)否
描述文本没有
point_url VARCHAR(255)否
地址VARCHAR(255)否
城市VARCHAR(255)无
状态为varchar(255)无
ZIP_CODE VARCHAR(255)无
电话为varchar(255)无
名VARCHAR(255)无
LAT VARCHAR(25)否
隆基VARCHAR(25)否
USER_ID INT(2)无0
功能INT(1)是0
状态INT(1)否1个
kmlno INT(2)无0
LASTUPDATE VARCHAR(255)否
IMAGE_URL VARCHAR(255)无

评价表: 字段类型Null默认注释 REVIEW_ID INT(11)否
审查INT(1)否0
review_title VARCHAR(255)无
review_desc文本没有
star_points INT(11)是0
USER_ID INT(11)是0
point_id INT(11)否
LAT VARCHAR(25)否
茇VARCHAR(25)否
LASTUPDATE VARCHAR(255)否
状态VARCHAR(1)没有R

分类表: 字段类型Null默认注释 CATEGORY_ID INT(11)否
标题VARCHAR(255)否
描述文本否
文件名的varchar(255)否
IMAGE_NAME VARCHAR(255)否
状态INT(1)是0
LASTUPDATE VARCHAR(255)否

+0

哪一列给你提问?你能格式化你的查询,以便可以读取它吗? – 2010-05-22 20:49:51

+0

我想通了。我不需要使用'points'来预置lat和longi列,而是需要以'distResults'开头,因为这是使用的表别名。感谢大家的帮助。 – Jason 2010-06-24 00:01:17

回答

0

没有看到你的模式,很难确切地知道问题是什么。但我确实看到一个问题 - 将内部选择的HAVING距离移动到外部选择。 “距离”名称不适用于内部选择。我也将HAVING改为WHERE,因为没有GROUP BY。

SELECT point_title, point_url, address, city, state, zip_code, 
    phone, `points`.`lat`, `points`.`longi`, featured, 
    kmlno, image_url, category.title, category_id, 
    point_id, lat, longi, reviews.star_points, reviews.review_id, 
    count(reviews.point_id) as totals 
FROM (SELECT * FROM (SELECT *, 
     (3959 * acos(cos(radians('37.7717185')) * cos(radians(lat)) 
      * cos(radians(longi) - radians('-122.4438929')) + 
      sin(radians('37.7717185')) * sin(radians(lat)))) AS distance 
     FROM points) AS distResultsInner 
     WHERE distance<25)) AS distResults 
LEFT JOIN category USING (category_id) 
LEFT JOIN reviews USING (point_id) 
WHERE (point_title LIKE '%Playgrounds%' 
    OR category.title LIKE '%Playgrounds%') 
GROUP BY point_id ORDER BY totals DESC, distance 
LIMIT 0 , 10 
+0

好的谢谢,但我得到这个错误与上述查询: #1064 - 你的SQL语法错误;检查与您的MySQL服务器版本对应的手册,以找到在''附近使用的正确语法')AS distResults LEFT JOIN类别USING(category_id)LEFT JOIN审核第11行的U' – Jason 2010-05-24 19:32:19

+0

原始文章更新为显示模式 – Jason 2010-05-24 19:40:50

+0

是的, 。我更新了查询。 – mdma 2010-05-24 22:07:06

相关问题