복붙노트

[SQL] SQL - 하나 개의 쿼리의 업데이트는 여러 레코드

SQL

SQL - 하나 개의 쿼리의 업데이트는 여러 레코드

나는 테이블이 - 설정을. 개요: 구성 이름 | config_value

그리고 나는 하나 개의 쿼리에서 여러 레코드를 업데이트하고 싶습니다. 나는 그 같은 시도 :

UPDATE config 
SET t1.config_value = 'value'
  , t2.config_value = 'value2' 
WHERE t1.config_name = 'name1' 
  AND t2.config_name = 'name2';

하지만 쿼리는 잘못된 것입니다 :(

도와주세요?

해결법

  1. ==============================

    1.중 멀티 테이블 업데이트 구문을보십시오

    중 멀티 테이블 업데이트 구문을보십시오

    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';
    

    여기 SQLFiddle 데모입니다

    또는 조건부 갱신

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

    여기 SQLFiddle 데모입니다

  2. ==============================

    2.당신은 다음과 같이 INSERT로 수행 할 수 있습니다 :

    당신은 다음과 같이 INSERT로 수행 할 수 있습니다 :

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

    이 삽입 새 테이블에 값을하지만, 기본 키가 중복되는 경우 사용자가 지정한 값이 업데이트 될 것이며, 동일한 레코드가 두 번째 시간을 삽입 할 수없는 것 (이미 테이블에 삽입).

  3. ==============================

    3.내 경우에는 내가 대신 내가이 선호마다 업데이트 쿼리 타격이 더 많은 1000보다 레코드를 업데이트해야

    내 경우에는 내가 대신 내가이 선호마다 업데이트 쿼리 타격이 더 많은 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 나는 나를 위해 BASE_ID 999 개 88 respectively.This 작업을 업데이트해야합니다.

  4. ==============================

    4.어쩌면 누군가는 도움이 될 것입니다

    어쩌면 누군가는 도움이 될 것입니다

    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
    

    (1 2) 기록 및 삽입하면 새로운 하나를 기존이 SQL 업데이트

  5. ==============================

    5.카밀의 솔루션을했다. SQL 문까지 기록 기본적인 PHP 함수로 바꿨다. 이 다른 사람을 도움이되기를 바랍니다.

    카밀의 솔루션을했다. SQL 문까지 기록 기본적인 PHP 함수로 바꿨다. 이 다른 사람을 도움이되기를 바랍니다.

        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;
        }
    
  6. ==============================

    6.대신이의

    대신이의

    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');
    
  7. ==============================

    7.당신은 모든 컬럼에있는 모든 레코드를 업데이트하려면 아래 코드를 실행합니다 :

    당신은 모든 컬럼에있는 모든 레코드를 업데이트하려면 아래 코드를 실행합니다 :

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

    특정 행의 모든 ​​열을 업데이트 할 경우 다음 코드 아래 실행 :

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

    8.당신은 B1에서 열 A1의 config_value 및 구성 이름으로 Excel 스프레드 시트에 갱신에 값 목록을 가정하면 당신은 쉽게 Excel 수식 등을 사용하여 쿼리가를 쓸 수 있습니다

    당신은 B1에서 열 A1의 config_value 및 구성 이름으로 Excel 스프레드 시트에 갱신에 값 목록을 가정하면 당신은 쉽게 Excel 수식 등을 사용하여 쿼리가를 쓸 수 있습니다

    = CONCAT ( "UPDATE 구성 SET의 config_value =" "" "A1," "", "WHERE 구성 이름 =", " '", B1, "'")

  9. from https://stackoverflow.com/questions/20255138/sql-update-multiple-records-in-one-query by cc-by-sa and MIT license