Mysql SQL-在一个查询中更新多个记录

Mysql SQL-在一个查询中更新多个记录,mysql,record,Mysql,Record,我有表-配置。 模式: config_name>config_value 我想在一个查询中更新多个记录。我试着这样做: UPDATE config SET t1.config_value = 'value' , t2.config_value = 'value2' WHERE t1.config_name = 'name1' AND t2.config_name = 'name2'; 但这一质疑是错误的:( 你能帮我吗?试试多表更新语法 UPDATE config t1 JOIN

我有表-配置。 模式:
config_name>config_value

我想在一个查询中更新多个记录。我试着这样做:

UPDATE config 
SET t1.config_value = 'value'
  , t2.config_value = 'value2' 
WHERE t1.config_name = 'name1' 
  AND t2.config_name = 'name2';
但这一质疑是错误的:(


你能帮我吗?

试试多表更新语法

UPDATE config t1 JOIN config t2
    ON t1.config_name = 'name1' AND t2.config_name = 'name2'
   SET t1.config_value = 'value',
       t2.config_value = 'value2';
这里是演示

或条件更新

UPDATE config
   SET config_value = CASE config_name 
                      WHEN 'name1' THEN 'value' 
                      WHEN 'name2' THEN 'value2' 
                      ELSE config_value
                      END
 WHERE config_name IN('name1', 'name2');

以下是演示

您可以通过插入完成,如下所示:

INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c);

这将向表中插入新值,但如果主键重复(已插入表中),则您指定的值将被更新,并且不会再次插入相同的记录。

在我的情况下,我必须更新超过1000条的记录,而不是每次我希望这样做时都点击更新查询

   UPDATE mst_users 
   SET base_id = CASE user_id 
   WHEN 78 THEN 999 
   WHEN 77 THEN 88 
   ELSE base_id END WHERE user_id IN(78, 77)

78,77是用户id,对于这些用户id,我需要分别更新基本id 999和88。这对我有效。

如果要更新所有列中的所有记录,请执行以下代码:

update config set column1='value',column2='value'...columnN='value';
如果要更新特定行的所有列,请执行以下代码:

update config set column1='value',column2='value'...columnN='value' where column1='value'

也许对某些人来说会有用

对于Postgresql 9.5来说,它是一种魅力

INSERT INTO tabelname(id, col2, col3, col4)
VALUES
    (1, 1, 1, 'text for col4'),
    (DEFAULT,1,4,'another text for col4')
ON CONFLICT (id) DO UPDATE SET
    col2 = EXCLUDED.col2,
    col3 = EXCLUDED.col3,
    col4 = EXCLUDED.col4

此SQL更新现有记录并在新记录(2合1)生效时插入。将其转换为基本PHP函数,编写SQL语句。希望这对其他人有所帮助

    function _bulk_sql_update_query($table, $array)
    {
        /*
         * Example:
        INSERT INTO mytable (id, a, b, c)
        VALUES (1, 'a1', 'b1', 'c1'),
        (2, 'a2', 'b2', 'c2'),
        (3, 'a3', 'b3', 'c3'),
        (4, 'a4', 'b4', 'c4'),
        (5, 'a5', 'b5', 'c5'),
        (6, 'a6', 'b6', 'c6')
        ON DUPLICATE KEY UPDATE id=VALUES(id),
        a=VALUES(a),
        b=VALUES(b),
        c=VALUES(c);
    */
        $sql = "";

        $columns = array_keys($array[0]);
        $columns_as_string = implode(', ', $columns);

        $sql .= "
      INSERT INTO $table
      (" . $columns_as_string . ")
      VALUES ";

        $len = count($array);
        foreach ($array as $index => $values) {
            $sql .= '("';
            $sql .= implode('", "', $array[$index]) . "\"";
            $sql .= ')';
            $sql .= ($index == $len - 1) ? "" : ", \n";
        }

        $sql .= "\nON DUPLICATE KEY UPDATE \n";

        $len = count($columns);
        foreach ($columns as $index => $column) {

            $sql .= "$column=VALUES($column)";
            $sql .= ($index == $len - 1) ? "" : ", \n";
        }

        $sql .= ";";

        return $sql;
    }

假设您在Excel电子表格中有要更新的值列表,其中列A1中有config\u value,列B1中有config\u name,您可以使用Excel公式轻松编写查询,如

=CONCAT(“更新配置集配置值=”,“”,A1,”,“其中配置名称=”,“”,B1,”)

而不是此

UPDATE staff SET salary = 1200 WHERE name = 'Bob';
UPDATE staff SET salary = 1200 WHERE name = 'Jane';
UPDATE staff SET salary = 1200 WHERE name = 'Frank';
UPDATE staff SET salary = 1200 WHERE name = 'Susan';
UPDATE staff SET salary = 1200 WHERE name = 'John';
你可以用

UPDATE staff SET salary = 1200 WHERE name IN ('Bob', 'Frank', 'John');

执行下面的代码来更新n行,其中父ID是您想要从中获取数据的ID,子ID是您需要更新的ID,因此您只需添加父ID和子ID,就可以使用一个小脚本来更新您需要的所有行

 UPDATE [Table]
 SET column1 = (SELECT column1 FROM Table WHERE IDColumn = [PArent ID]),
     column2 = (SELECT column2 FROM Table WHERE IDColumn = [PArent ID]),
     column3 = (SELECT column3 FROM Table WHERE IDColumn = [PArent ID]),
     column4 = (SELECT column4 FROM Table WHERE IDColumn = [PArent ID]),
 WHERE IDColumn IN ([List of child Ids])


您使用的是什么数据库?我使用的是MySQL数据库。从选择更新可能是答案Yee,这很好,但当我想在一个查询中更新16条记录时会发生什么?我建议使用JOIN x 16?您应该首先在问题中提到这些重要的细节。无论如何,请参阅更新的答案以获得另一个解决方案(条件更新).t1和t2在您的示例中是什么?您好@PaulBrewczynski。这些都是表别名,可以写成
config AS t1
,其中
AS
是可选的。@peterm:SQLFiddle链接断开了。否则,条件更新技术工作得很好。谢谢!这是一个相当聪明的破解方法。我很惊讶。Postgres不支持:此外,这是一个很好的方式来转换一点CSV(或很多)这是一个MySQL解决方案,不是Postgres或MSSQL。这将增加自动增量id,即使记录没有插入或更新。正如我看到的,id是表的pk,根据您的查询。假设有两列或更多列被视为pk(复合键)…在这种情况下,检查冲突的正确方法应该是什么。如果不同行中的值不同,该怎么办?例如,UPDATE staff SET salary=1125,其中name='Bob';UPDATE staff SET salary=1200,其中name='Jane';UPDATE staff SET salary=1100,其中name='Frank';UPDATE staff SET salary=1175,其中name='Susan';UPDATE staff SETsalary=1150,其中name='John';这里最好的一个,对我来说非常有用。您好,这个问题询问了一种更新多行的方法,而您共享的代码是用于插入多行的。这是我的系统中最好的解决方案opinion@UtsavBarnwal这是一个INSERT命令,但用于主键或唯一键匹配的行(在本例中为“name”)然后MYSQL将执行一个更新命令。使用VALUES()从插入数据中获取值,或者使用数据库中已有的列数据更新“salary”。@tristanbailey感谢您的解释。我刚刚用一个复杂的查询进行了尝试,效果非常好。jay10太好了
INSERT INTO tablename
    (name, salary)
    VALUES 
        ('Bob', 1125),
        ('Jane', 1200),
        ('Frank', 1100),
        ('Susan', 1175),
        ('John', 1150)
        ON DUPLICATE KEY UPDATE salary = VALUES(salary);