2015-10-02 135 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

相關問題