gpt4 book ai didi

MySql 嵌套选择和内部连接

转载 作者:行者123 更新时间:2023-11-29 00:24:31 25 4
gpt4 key购买 nike

我现有的搜索功能运行良好。它正在搜索表 1(俱乐部),但需要从表 2(城镇)中获取一些数据。为此,它对两个表进行内部联接。

我现在试图将结果限制在距离某个点一定距离内的结果。

两个表都有名为纬度和经度的字段,但只填充了 Towns 值,因此我需要在搜索中使用这些值。

其他几个字段在两个表中使用相同的名称,因此我必须指出我指的是哪个表(例如 Towns.town_key)。

为了进行距离搜索,我在内部嵌套中进行了粗略的方框搜索,然后在外部嵌套中对其结果使用了毕达哥拉斯公式。 (我不需要 Haversine 的准确性。)

无论我尝试什么,我总是在前面有表名的字段上收到错误。不幸的是,尽管阅读了大量书籍,但我并不完全理解别名等的使用。

这是我的搜索:

SELECT club_key, name, Towns.town_key, town_name, Clubs.address,
sqrt(((-32.380100 - Towns.latitude)*111.133)^2 + ((147.481400 -
Towns.longitude)*93.853)^2) AS dist FROM

(SELECT club_key, name, Towns.town_key, town_name, Clubs.address FROM Clubs

INNER JOIN Towns ON Clubs.town_key = Towns.town_key WHERE type = 'football'
AND Towns.latitude BETWEEN -32.829761 AND -31.930439 AND Towns.longitude BETWEEN 146.948951 AND 148.013849) AS T1

WHERE dist < 50 ORDER BY 6,2

最新的错误是:无法运行查询:“字段列表”中的未知列“Towns.town_key”

在此之前,它反对在内部和外部选择中使用的纬度和经度字段。

最佳答案

这里的问题是您的别名的范围。试一试:

SELECT T1.club_key, T1.name, T1.town_key, T1.town_name, T1.address,T1.dist
FROM
(
SELECT
sqrt(((-32.380100 - Towns.latitude)*111.133)^2 + ((147.481400 -
Towns.longitude)*93.853)^2) AS dist,
club_key, name, Towns.town_key, town_name, Clubs.address
FROM Clubs
INNER JOIN Towns ON Clubs.town_key = Towns.town_key
WHERE type = 'football'
AND Towns.latitude BETWEEN -32.829761 AND -31.930439
AND Towns.longitude BETWEEN 146.948951 AND 148.013849
) AS T1
WHERE T1.dist < 50 ORDER BY 6,2

您正在尝试在嵌套选择之外使用别名,即 Towns,它引用嵌套选择内的表,即 Towns 表。您可以使用您的 T1 别名来解决这个问题。

关于MySql 嵌套选择和内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19562633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com