PostgreSQL 查询更新 returns 更新 0
PostgreSQL query update returns UPDATE 0
我在使用 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.
永远不要假设您看到的小数位就是存储在 table 中的确切数字。
在你的情况下,只有 id
或 prof_id
足以更新行(正如我从附件中看到的),因此,不需要 lat
和 long
,但是如果您在更新期间被迫使用十进制数字进行比较(我会争辩说,如果是这种情况,您的数据库设计不佳 tables),请始终将它们四舍五入为可控小数点如下:
UPDATE locations SET
lat = 48.20325265836398,
long = 16.34969524923078
WHERE prof_id = 58
AND ROUND(lat,13) = 47.5327567434237
AND ROUND(long,13) = 21.6292262077332
您的问题可能出在其他地方(请参阅此 db<>fiddle
)
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)
对您的数据的几点看法:
- 减少坐标的
level of precision
。 13 位小数是微米级的,这在地理应用程序中不是很有用。正如您自己所见,这种精确度使 =
查询非常具有挑战性。
- 考虑使用
PostGIS
来存储您的坐标。它有超过 1.3k 的 kickass 函数,使处理地理空间数据变得非常简单和高效。一开始它可能看起来很复杂,但相信我,它肯定会在长期 运行! 中得到回报
我在使用 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.
永远不要假设您看到的小数位就是存储在 table 中的确切数字。
在你的情况下,只有 id
或 prof_id
足以更新行(正如我从附件中看到的),因此,不需要 lat
和 long
,但是如果您在更新期间被迫使用十进制数字进行比较(我会争辩说,如果是这种情况,您的数据库设计不佳 tables),请始终将它们四舍五入为可控小数点如下:
UPDATE locations SET
lat = 48.20325265836398,
long = 16.34969524923078
WHERE prof_id = 58
AND ROUND(lat,13) = 47.5327567434237
AND ROUND(long,13) = 21.6292262077332
您的问题可能出在其他地方(请参阅此 db<>fiddle
)
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)
对您的数据的几点看法:
- 减少坐标的
level of precision
。 13 位小数是微米级的,这在地理应用程序中不是很有用。正如您自己所见,这种精确度使=
查询非常具有挑战性。 - 考虑使用
PostGIS
来存储您的坐标。它有超过 1.3k 的 kickass 函数,使处理地理空间数据变得非常简单和高效。一开始它可能看起来很复杂,但相信我,它肯定会在长期 运行! 中得到回报