我有下表lc
:
a b c d co NA co 1 co NA co 84 us co us 6 NA co NA 54 us NA NA 4
还有另一张桌子 ro
d value bb 1 co 0.5 mn 0.03 us 2
我想lc
使用中的值更新其中的值ro
以获取以下内容:
a b c d 0.5 NA 0.5 1 0.5 NA 0.5 84 2 0.5 2 6 NA 0.5 NA 54 2 NA NA 4
我有代码:
lc <- sqldf(c("UPDATE lc SET a = (SELECT ro.value FROM ro WHERE lc.a = ro.d)", "SELECT * FROM main.lc") )
显然,这只会更新列a
,而不会更新其他列。如何更新同一条语句中的其余列?我看过解决SQL中UPDATE查询的帖子,但所有帖子都只比较一个表中的一列和另一表中的一列。
这只是一个例子,实际上我有40列要更新,lc
其中包含数百万行,并且a
b
c
值可以不同于co
和us
,因此我需要它非常有效。
您可以在脚本下方尝试以下操作-
SELECT B.value a,C.value b,D.value c, A.d FROM lc A LEFT JOIN ro B ON A.a = B.d LEFT JOIN ro C ON A.b = C.d LEFT JOIN ro D ON A.C = D.d
输出是-
a b c d 0.50 NULL 0.50 1 0.50 NULL 0.50 84 2.00 0.50 2.00 6 NULL 0.50 NULL 54 2.00 NULL NULL 4