2015-07-06 2 views
-1

Вот пример таблица:MySQL как обновить столбец всех строк и для каждой строки другого значения столбца

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 
+0

Вы просите SQL сделать это? Вы что-то пробовали? Это просто запись нескольких операторов обновления. Не должно быть слишком сложно разобраться. – sstan

+0

, за исключением фактической таблицы im, пытающейся изменить, имеет более 100 строк, которые необходимо обновить ... это всего лишь образец – dave

+0

Есть ли способ вычисления этого кода для каждой строки? – celticminstrel

ответ

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

Попробуйте

UPDATE Table_Name WHERE id = desired_id SET code = desired_code; 

Конечно, вам нужно заменить table_name, desired_id и desired_code по мере необходимости.

+0

Я не могу обновить несколько строк в одном запросе с помощью этого ... – dave

+0

Ну, я не совсем уверен, что вы хотите сделать. Ваш оригинальный вопрос кажется слишком расплывчатым. Таким образом, вы хотите, чтобы каждый идентификатор в вашей таблице получил свое собственное значение кода, правильно? Вы уже хранили где-то отношение между id и кодом? –

+0

показывает это расплывчато? я имею в виду, что я дал, как выглядит таблица в начале и как я хотел, чтобы это выглядело ... Я не понимаю, как кто-то может сбить с толку ... – dave

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(); 

Надеется, что это поможет вам начать работу.

Смежные вопросы