2013-03-29 34 views
0

我有2個表 positions - 其中包含一個名爲「tripname」一個場 trips - 其中包含了一個名爲「name複製SQL表的內容從一個表到另一個 - 有條件

我使用CSV文件從現場哪些數據被導入到這兩個表中,現在我需要做一些更新並且有點卡住了。

'positions'表通過添加csv文件中包含的行數來更新。一個字段被稱爲'tripname'(其中包含一個值),另一個字段被稱爲'FK_Trips_ID'(它被添加爲NULL)。

'trips'表只更新一行(如果它尚不存在),其中包含名爲'name'的字段和另一個名爲'ID'的字段。

這裏是我卡住的地方。我需要:

Insert into the 'positions.FK_Trips_ID' field the value of the 'trips.ID' 
where the 'trips.name' is equal to the 'positions.tripname 
- BUT only if 'positions.FK_Trips_ID' is NULL 

我無法找到這種類型的插入的一個類似的例子,不知道如果某種靈魂可以在正確的方向指向我。

回答

2

我想你的意思是UPDATEFK_Trips_ID根據表positions根據trips表中的匹配記錄。

您可以加入兩個表來對數據庫只有一個要求,

UPDATE positions a 
     INNER JOIN trips b 
      ON a.tripname = b.name 
SET  a.FK_Trips_ID = b.ID 
WHERE a.FK_Trips_ID IS NULL 

對於UPDATE聲明更快的性能,列必須是索引,以避免執行全表掃描這會導致慢當在大型數據庫上進行時。

ALTER TABLE positions ADD INDEX (tripname); 
ALTER TABLE trips ADD INDEX (name); 
+0

謝謝JW - 您的回覆非常感謝。我看到「插入」和「更新」之間的邏輯和區別。還有一個問題,如果我可以。在'旅行'表中還有一個字段'FK_Users_ID。如果我想在同一時間(同樣的條件)在'頭寸'表中更新這個數據,那麼這將如何影響你的陳述。 – user2202256

+0

沒關係JW - 經過幾次嘗試,我發現了它。再次感謝你的幫助。 – user2202256

相關問題