【问题标题】:Table alias -- Unknown column in field list表别名——字段列表中的未知列
【发布时间】: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”,因为那是正在使用的表别名。感谢大家的帮助。

标签: sql mysql


【解决方案1】:

如果没有看到您的架构,就很难确定问题出在哪里。但我确实看到了一个问题 - 将 HAVING 距离

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

【讨论】:

  • 好的,谢谢,但是我在上面的查询中得到了这个错误:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ') AS distResults LEFT JOIN category USING ( category_id ) LEFT JOIN reviews U' 附近使用的正确语法在第 11 行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
相关资源
最近更新 更多