我准备了以下 SQL 语句,以便用表的相应行更新master_id
表staging
的id
字段master
。master
包含因其位置而唯一的对象。因此,如果有的话,最多应该返回一个 id。
UPDATE staging
SET master_id = (
SELECT m.id
FROM master m, staging s
WHERE m.lat = s.lat
AND m.lon = s.lon
);
但是,查询失败并显示You can't specify target table 'staging' for update in FROM clause
. 我怎样才能解决这个问题?
另外我认为查询可以使用JOIN
. 如果您能对此有所帮助,那就太好了!
这是我加入两个表的尝试:
UPDATE staging s
INNER JOIN master m
ON s.lat = m.lat
AND s.lon = m.lon
SET s.master_id = m.id;
Query OK, 0 rows affected (0.38 sec)
Rows matched: 14976 Changed: 0 Warnings: 0
下次尝试:
UPDATE staging s
INNER JOIN (
SELECT id, lat, lon
FROM master
) AS m
ON s.lat = m.lat
AND s.lon = m.lon
SET s.master_id = m.id;
Query OK, 0 rows affected (0.35 sec)
Rows matched: 14976 Changed: 0 Warnings: 0
请注意,如果这会影响您解决方案的语法,我正在使用 MySQL。
为了确认确实有匹配的行(每个 <-- 这是有意的),这个查询应该证明这个事实。
SELECT COUNT(*)
FROM master m, staging s
WHERE t.lat = s.lat
AND t.lon = s.lon;
+----------+
| count(*) |
+----------+
| 14976 |
+----------+
1 row in set (0.05 sec)