2013-03-29 29 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

相关问题