我在使用PostgreSQL查询时遇到了问题,因为我的更新条件包含更多的先决条件。
我附上了2张图片来描述我的问题。
我想要更新突出显示的行

UPDATE locations
SET lat = 48.20325265836398, long = 16.34969524923078
WHERE prof_id = 58 AND lat = 47.5327567434237 AND long = 21.6292262077332但回应是:
UPDATE 0 Query returned successfully in 58 msec.发布于 2021-02-28 19:34:03
您的问题可能在其他地方(请参阅此
)
CREATE TEMPORARY TABLE locations (
id INT, prof_id INT, lat NUMERIC, long NUMERIC);
INSERT INTO locations VALUES
(57,58,47.5327567434237,21.6292262077332);
UPDATE locations SET lat = 48.20325265836398, long = 16.34969524923078
WHERE prof_id = 58 AND lat = 47.5327567434237 AND long = 21.6292262077332;
SELECT * FROM locations;
id | prof_id | lat | long
----+---------+-------------------+-------------------
57 | 58 | 48.20325265836398 | 16.34969524923078
(1 Zeile)关于你的数据的一些想法:
减少
你的坐标。有了13个小数,你就进入了微米的范围,这在地理应用程序中并不是很有用。正如你所见,这种精确度使得
查询非常具有挑战性。
考虑使用
来存储你的坐标。它有超过1.3k的kickass函数,使得处理地理空间数据变得非常简单和高效。一开始可能看起来很复杂,但相信我,从长远来看,它肯定会有回报的!
发布于 2021-02-28 19:31:35
永远不要假设您看到的小数位就是存储在表中的确切数字。
在您的情况下,仅
或者
足以更新行(正如我从附件中看到的),因此,不需要
和
但是,如果您在更新过程中被迫使用小数进行比较(如果您的数据库表设计不佳,我会争辩),请始终将它们舍入到可控制的小数点,如下所示:
UPDATE locations SET
lat = 48.20325265836398,
long = 16.34969524923078
WHERE prof_id = 58
AND ROUND(lat,13) = 47.5327567434237
AND ROUND(long,13) = 21.6292262077332https://stackoverflow.com/questions/66408388
复制相似问题