只是为了让大象离开房间,因为有很多类似的问题。我浏览了其他名称相似的帖子,但没有找到我要找的东西。话虽这么说,我可能只是没有看到如何将他们的问题实现到我的具体实现中

我正在尝试将表中的多行更新为所有 [可能] 不同的值,但我不知道我将更新多少行我使用外键定位。但是,由于数据库限制,可以安全地假设我有正确数量的输入。(例如 3 行 3 个值,或 ,mysql,sql"/>

首页 > 解决方案 > MySQL - 更新集(n) 在哪里

.`外键`

只是为了让大象离开房间,因为有很多类似的问题。我浏览了其他名称相似的帖子,但没有找到我要找的东西。话虽这么说,我可能只是没有看到如何将他们的问题实现到我的具体实现中

我正在尝试将表中的多行更新为所有 [可能] 不同的值,但我不知道我将更新多少行我使用外键定位。但是,由于数据库限制,可以安全地假设我有正确数量的输入。(例如 3 行 3 个值,或

问题描述

只是为了让大象离开房间,因为有很多类似的问题。我浏览了其他名称相似的帖子,但没有找到我要找的东西。话虽这么说,我可能只是没有看到如何将他们的问题实现到我的具体实现中

我正在尝试将表中的多行更新为所有 [可能] 不同的值,但我不知道我将更新多少行我使用外键定位。但是,由于数据库限制,可以安全地假设我有正确数量的输入。(例如 3 行 3 个值,或 5 行 5 个值)并且即使假设不安全,我也不介意抛出错误,因为如果确实发生了错误,这将确保数据完整性......

将哪些值分配给哪些行并不重要。

这是我尝试过的一些示例。

UPDATE table1 
SET 
    table1.column1 IN (17 , 37, 62)
WHERE
    table1.foreign_key = 877;

之后我发现你不能这样使用 IN ......然后我尝试了:

UPDATE table1 
SET 
    table1.column1 = (17 , 37, 62)
WHERE
    table1.primary_key IN (SELECT 
            primary_key
        FROM
            table1
        WHERE
            foreign_key = 877);

但是,“您不能在 FROM 子句中指定目标表 'table1' 进行更新”

这对于 SELECT 然后在(n_rows + 1 个查询)之后进行更新(如下所示)来说是相当简单的,所以我假设它是可以在一个查询中完成。

SELECT primary_key from table1 where foreign_key = ?;,[877]

然后映射值和主键(我使用的是nodejs后端)

UPDATE table1 set column1 = ? where primary_key = ?;,[value1,primary_key1]

困难的部分似乎是

  1. 如何将多个值映射到多行。
  2. 如何在运行时获取每一行的唯一 ID。

我不介意是否必须使用存储过程,我只是真的不想向数据库发送 n+1 个查询。


你的意思可能是这样的:

for line in f:
    sid, sname, sage = line.split(",")
    student = Student(sid, sname, int(sage))
    student_list.append(student)

哦,你忘了return student_list从功能。

顺便说一句,如果您学习 python,请不要忘记查看 pep-8 样式指南:https ://www.python.org/dev/peps/pep-0008/

标签: mysqlsql

解决方案


您只需要像下面这样的一个查询来更新您的数据。

insert into TABLENAME(key, column1, column2, ...) values (?),(?),... on duplicate key update column1=value(column1), column2=value(column2), ...;

您也可以通过此链接访问我的帖子。

Node.js 在 Mysql 中使用数组更新表

2天前我遇到了同样的问题。


推荐阅读