【问题标题】:How to update certain rows using UPDATE function using sqldf R package?如何使用 sqldf R 包使用 UPDATE 函数更新某些行?
【发布时间】:2020-08-30 10:14:13
【问题描述】:

我有两个表:dat1 和 dat2。

names(dat1):
id, filename, kd_estimated, kd_95CI_low, kd_95CI_upp, start_time, end_time, max_response, min_response   , RMSE, resp_95CI_low, resp_95CI_upp



  names(dat2) = names(dat1)

数据如下所示:

1, A1_a1H12.xls.txt, 0.00172, 0.0017, 0.00174, 450, 600, 0.267, 0.204, 0.00256, 0.229, 0.229

当文件名相同时,我想用 dat2 更新 dat1。以下是我的代码:

mydata_up <- sqldf(c("UPDATE dat1 SET kd_estimated = dat2.kd_estimated FROM dat2 WHERE dat2.filename = dat1.filename", "SELECT * FROM dat1"))

但是,我总是收到以下错误:

“错误:靠近“FROM”:语法错误”

没有线索:-(谢谢你的帮助。

【问题讨论】:

  • 嗨 Sophia,请选择代码部分然后点击“{}”这个标志。这将转换灰色区域的代码部分,以便每个人都可以理解哪些行是代码,哪些是文本。谢谢
  • 请用您正在运行的数据库标记您的问题:mysql、oracle、postgresql...?
  • 另一种简单的方法:突出显示代码并按Ctrl-K,同样的事情。 stackoverflow.com/editing-help 提供有关如何格式化的帮助,虽然这听起来很琐碎,但一个格式良好的问题使得将文本与代码与来自文本的数据区分开来……变得更加简单,并将代码格式化为固定宽度,这可能是多少(大多数?所有?idk)IDE 提供代码编辑。让它吸引眼球,让人们更容易看久一点,可能会解决你的问题。
  • @GMB,是sqldf,是一个后台使用SQLite引擎的R包。我通常认为sqldf 就足够了,因为在sqldf 上下文中存在逻辑上不适用的SQLite 事物。
  • Sophia,鉴于您在 R 中使用 SQL 语法,因此明确命名法很重要。 R 没有“表格”,所以我假设dat1dat2 是数据帧。请提供一个最小的可重现示例 (stackoverflow.com/help/minimal-reproducible-example),并向我们展示您的预期输出。 “当文件名相同时,用 dat2 更新 dat1”是什么意思?你的意思是相当于if (dat1[1,2] == dat2[1,2]) dat1 &lt;- dat2

标签: sql r sqlite sql-update sqldf


【解决方案1】:

在许多数据库中,您可以为此使用相关子查询:

UPDATE dat1 SET kd_estimated = (
    SELECT dat2.kd_estimated 
    FROM dat2 
    WHERE dat2.filename = dat1.filename
)

如果dat2 中可能缺少匹配项,则:

UPDATE dat1 SET kd_estimated = (
    SELECT dat2.kd_estimated 
    FROM dat2 
    WHERE dat2.filename = dat1.filename
)
WHERE EXISTS (
    SELECT 1
    FROM dat2 
    WHERE dat2.filename = dat1.filename
)

【讨论】:

  • 非常感谢。我的问题可能不清楚。我想用 dat2 中的行更新 dat1 中的某些行,其中文件名相同,例如,在 dat1、a1、7 中; a3, 8;在 dat2、a1、9、a3、10 中。我想分别用 9 和 10 更新 dat1 中的 a1 和 a3。谢谢。
  • @sophia:这就是查询的作用。请试一试。
  • 非常感谢。第二部分(“...缺少匹配”)正是我所需要的。我之前只尝试过第一部分。保重。
  • 你能帮我理解“WHERE EXISTS”的意思吗?谢谢!
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2015-11-28
  • 2015-11-07
  • 2018-12-19
  • 2012-05-07
相关资源
最近更新 更多