原谅我,但我对SQL比较陌生。
我正在尝试使用我创建的函数更新我创建的表的列,但是当我运行Update语句时,没有任何反应,我只看到下划线闪烁(我假设它试图运行它) 。更新声明正在更新大约60,000个字段,所以我认为它应该花一点时间,但它已经10分钟而且没有好处。
我想知道是否有人知道下划线可能闪烁的一些一般原因。我知道这是超级将军,但我以前从未见过这个。
这是我所谈论的图像: http://i.imgur.com/Xk3kM2U.png?1
编辑:表格中有67,662条记录。 我还截取了查询并将其链接起来。
答案 0 :(得分:2)
您的旧式连接在ap1 / r1对和ap2 / r2对之间没有连接条件,因此您需要为67,662 * 67,622个坐标组合调用calc_distance()
函数。 distinct
的使用可能是一个警告,您知道自己正在获得重复项。然后子查询与更新本身之间没有相关性,因此您需要为temproute
中的每一行重复这一点。这需要一段时间。
看起来你可能不想从路线表的两份副本中查看源机场;但来自一个副本的源和目的地机场。
像(未经测试)的东西:
UPDATE temproute tr
SET distance = (
SELECT calc_distance(ap2.latitude, ap2.longitude, ap1.latitude, ap1.longitude)
FROM routes r
JOIN airports ap1 ON ap1.icaoairport = r.sourceid
JOIN airports ap2 ON ap2.icaoairport = r.destid
WHERE r.routeid = tr.routeid
);
如果temproute
也是route
的副本,也就是行计数所暗示的,那么您可能根本不需要在子查询中直接引用路由。
但我猜测你正在做什么。