【发布时间】:2023-03-15 10:03:01
【问题描述】:
我有一个 sql 查询,它在 2 个表上执行 LEFT JOIN,其中一些列不明确。我可以为连接的表添加前缀,但是当我尝试在 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) 否
state varchar(255) 否
zip_code varchar(255) 否
电话 varchar(255) 否
文件名 varchar(255) 否
lat varchar(25) 否
longi 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 text 否
星点 int(11) 否 0
user_id int(11) 否 0
point_id int(11) 否
lat varchar(25) 否
longi 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) 否
【问题讨论】:
-
哪一栏给你带来了问题?你能格式化你的查询以便阅读吗?
-
我想通了。我不需要在 lat 和 longi 列前面加上“points”,而是在前面加上“distResults”,因为那是正在使用的表别名。感谢大家的帮助。