我通过命令行和UPDATE database.table SET column = REPLACE (column, item1, item2);重复使用MySQL,每个查询都包含"item1,item2“的不同数据。大约有20个不同的查询,在一些测试和其他工作中,我将使用相同的集合至少3次,我想知道是否有一个查询可以使用,即我如何将所有20个版本组合成一个,以节省自己的时间?
例如,下面是我运行的独立查询,我想知道是否可以将它们组合到一个查询中。
mysql> update quiz_node_results set nid = replace (nid, 184461, 5784);
Query OK, 2057 rows affected (0.22 sec)
Rows matched: 33650 Changed: 2057 Warnings: 0
mysql> update quiz_node_results set nid = replace (nid, 184457, 5785);
Query OK, 2891 rows affected (0.17 sec)
Rows matched: 33650 Changed: 2891 Warnings: 0
mysql> update quiz_node_results set nid = replace (nid, 184462, 5786);
Query OK, 2189 rows affected (0.31 sec)
Rows matched: 33650 Changed: 2189 Warnings: 0想象一下,总共有20个,而不仅仅是这3个。
发布于 2017-08-22 17:32:29
我不能完全确定我是否理解了您想要做的事情,但是您可以将这组语句写入一个纯文本文件,然后将该文本文件提供给MySQL。
文本文件(假设其名称为test.sql):
update quiz_node_results set nid = replace (nid, 184461, 5784);
update quiz_node_results set nid = replace (nid, 184457, 5785);
...当然,在文本文件中,您必须添加"prologue“命令(如选择正确的数据库和其他要正确初始化的内容(如果需要))。
然后,在命令行中(不是在MySQL客户端中,而是在Linux / Windows命令行中):
mysql -p < test.sql如果我明白你想做什么,请让我知道…
发布于 2017-08-22 17:40:09
drop procedure doiterate;
DELIMITER $$
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
DECLARE VAR_ITEM1 INT DEFAULT 184457;
DECLARE VAR_ITEM2 INT DEFAULT 5784;
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 20 THEN
update quiz_node_results set nid = replace (nid, VAR_ITEM1, VAR_ITEM2);
SET VAR_ITEM1 := VAR_ITEM1+1;
SET VAR_ITEM2 := VAR_ITEM2+1;
ITERATE label1;
END IF;
LEAVE label1;
END LOOP label1;
END;您可以简单地创建简单的过程,该过程迭代20次并使用UPDATE QUERY更新值。
注意:这里我假设你已经订购了需要更新的记录。
https://stackoverflow.com/questions/45813703
复制相似问题