2015-10-02 133 views
0

我的位置的表被验证,像这样:MySQL的:如何添加一列从一个表到另一个

+--------+----------+----------+ 
| 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 | idW | lat | lon | 
+--------+--------+----------+----------+ 
| 100000 | 111650 | 47.20000 | 14.75000 | 
| 100002 | 111820 | 47.83234 | 16.23143 | 
| x | 111810 | 47.96412 | 16.25498 | 
+--------+--------+----------+----------+ 

其中x是任何值111810必须作为其在所有位置表ID。

+2

这种填充它被称为'JOIN',是的一个基本组成部分SQL语言。如果你打算使用它,你应该学习这门语言。 –

+0

并请提及预期的输出也 – Wanderer

+0

亲爱的戈登,除了通过提问之外,人们如何学习?我认为这是我在问答网站的原因。 – nonremovable

回答

1

更好的选择是只在正常查询或视图中使用连接查询数据库时才显示附加数据。

select t1.*, t2.field1, t2.field2 from t1 inner join t2 on t1.idW=t2.idW 

你可以在你的第一个表中的数据复制(有正当理由这样做,例如,选择最佳化的,但ITAS难得一遇)。您需要使用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

如果我理解正确,您希望将新列添加到原始表中。这是可以做到

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); 
+0

这不是一个真正有效的解决方案,因为它需要mysql对正在更新的表中的每个记录运行子查询。 – Shadow

相关问题