我有一张经过验证的位置表,如下所示:
+--------+----------+----------+
| idW | lat | lon |
+--------+----------+----------+
| 111650 | 47.20000 | 14.75000 |
| 111810 | 47.96412 | 16.25498 |
| 111820 | 47.83234 | 16.23143 |
+--------+----------+----------+
我还有一个"所有位置"的表格,无论是否经过验证。看起来像这样(我还有很多其他专栏遗漏了)
+--------+--------+----------+----------+
| id | idW | lat | lon |
+--------+--------+----------+----------+
| 100000 | 111650 | 47.20000 | 14.75000 |
| 100001 | 111712 | 42.96412 | 19.25498 |
| 100002 | 111820 | 47.83234 | 16.23143 |
+--------+--------+----------+----------+
我想要做的是,对于每个经过验证的位置,找到它的" id"在"所有位置"的表格中,将这些作为新的第一列附加在已验证的表格上(记住并非所有已验证的位置都存在于所有位置,因此它不像复制和粘贴,我不认为)。有什么想法吗?
编辑:我上面例子的预期输出是
+--------+--------+----------+----------+
| id | idW | lat | lon |
+--------+--------+----------+----------+
| 100000 | 111650 | 47.20000 | 14.75000 |
| 100002 | 111820 | 47.83234 | 16.23143 |
| x | 111810 | 47.96412 | 16.25498 |
+--------+--------+----------+----------+
其中x将是111810在所有位置表中作为其id的任何值。
答案 0 :(得分:1)
更好的选择是仅在正常查询或视图中使用连接查询数据库时显示其他数据。
select t1.*, t2.field1, t2.field2 from t1 inner join t2 on t1.idW=t2.idW
您可以将数据复制到第一个表格(这是有正当理由的,例如选择的最佳化,但这种情况很少见)。您需要使用alter table add column ...命令将额外的列添加到第一个表中(或者只使用sql编辑器应用程序)。
然后复制数据:
update t1, t2 set t1.fieldname=t2.fieldname where t1.idW=t2.idW
由于向表中添加列效率不高,您可以选择从现有表创建第3个表并复制数据:
create table t3 as select t1.*, t2.fieldname1, t2.fieldname2
from t1 inner join t2 on t1.idW=t2.idW
答案 1 :(得分:1)
如果我理解正确,您希望在原始表中添加新列。这可以作为
完成ALTER TABLE locations ADD COLUMN `id` INTEGER NULL DEFAULT NULL FIRST;
然后您可以通过将已验证位置表中的值设为
来填充它SET SQL_SAFE_UPDATES = 0;
UPDATE locations a SET id =
(SELECT id FROM verified_locations b
WHERE a.idW = b.idW AND a.lat = b.lat AND a.`long` = B.`long`
LIMIT 1);