mysql如何更新所有行的列,并为每行更新不同的列值

时间:2015-07-06 02:28:20

标签: mysql sql phpmyadmin sql-update

以下是一个示例表:

id   name   code
----------------
1    n1     
2    n2    
3    n3   

我想更新具有不同值的每一行的代码列,因此对于id为1的行,我想为代码'zb6DXBfJ'添加此值,为行id 2'NV6Nx4St'添加此值,对于行id 3代码列'q23ZMACc'的值。所以我的决赛桌应该是这样的:

id   name   code
----------------
1    n1     zb6DXBfJ
2    n2     NV6Nx4St
3    n3     q23ZMACc

3 个答案:

答案 0 :(得分:1)

UPDATE TableName 
 SET Code = CASE 
                 WHEN id = 1 THEN 'zb6DXBfJ'
                 WHEN id = 2 THEN 'NV6Nx4St'
                 WHEN id = 3 THEN 'q23ZMACc'
            END;

答案 1 :(得分:0)

试试这个

UPDATE Table_Name WHERE id = desired_id SET code = desired_code;

当然,您需要根据需要替换Table_Name,desired_id和desired_code。

答案 2 :(得分:0)

根据代码的来源,您可以尝试下列其中一项:

如果您的代码来自另一个表格,您可以创建一个匹配"匹配"两个表的每一行以更新代码。这是一个例子:

首先创建表格(您已经拥有的表格和带代码的表格)

CREATE TABLE table1 (
id INT(6) UNSIGNED PRIMARY KEY,
name VARCHAR(300) NOT NULL,
code VARCHAR(300));

CREATE TABLE table2 (
id INT(6) UNSIGNED PRIMARY KEY,
code VARCHAR(300) NOT NULL);

INSERT INTO table1 (id, name) VALUES
(1, 'n1'),
(2, 'n2'),
(3, 'n3');

INSERT INTO table2 (id, code) VALUES
(1, 'zb6DXBfJ'),
(2, 'NV6Nx4St'),
(3, 'q23ZMACc');

然后创建实际程序

delimiter //
CREATE PROCEDURE assign_strings()

BEGIN

    DECLARE _id INT DEFAULT 0;
    DECLARE str VARCHAR(300);
    DECLARE cur CURSOR FOR SELECT id FROM table1;

    open cur;
    myloop:LOOP
        fetch cur into _id;

        SELECT code INTO str FROM table2 WHERE id = _id;
        UPDATE table1 SET code = str WHERE id = _id;

    end loop myloop;
    close cur;


END //
delimiter ;

您现在可以调用该程序

CALL assign_strings();

请注意,我不知道您检索这些代码的逻辑。这里我假设table2.id有table1.id的代码。它有点笨,但你的逻辑可能会更复杂。

如果您的代码只是随机字符串(非唯一),您可以使用函数而不是像这样的过程:

DELIMITER //
CREATE FUNCTION get_random_string()
  RETURNS VARCHAR(300)
BEGIN
  RETURN 'Your_random_string';
END//
DELIMITER ;

请注意,您需要实施自己的随机字符串策略。你可以使用带有随机数和子串的MD5函数......无论你需要什么。

您现在可以直接在更新语句中调用此函数,如下所示:

UPDATE table1 set code = get_random_string();

希望它能让你开始。