복붙노트

[SQL] 하나의 MySQL의 쿼리에서 여러 행을 업데이트

SQL

하나의 MySQL의 쿼리에서 여러 행을 업데이트

나는 이것을 실행하려고 :

UPDATE test 
SET col2=1 WHERE col1='test1', 
SET col2=3 WHERE col1='test2';

나는 점점 오전 오류 :

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '

내 테이블 :

CREATE TABLE `test` (
    `col1` varchar(30) NOT NULL,
    `col2` int(5) DEFAULT NULL,
    PRIMARY KEY (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

그것은 첫 번째 행의 끝 부분에 대해 뭔가입니다. 나는 그것을 변경하는 경우, 그것은 COL2 인식하지 않았다. 어떻게 하나 개의 쿼리에서이 작업을 수행 할 수 있습니까?

해결법

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

    1.이것은 가장 명확한 방법입니다

    이것은 가장 명확한 방법입니다

    UPDATE test
    SET col2 = CASE col1
    WHEN 'test1' THEN 1
    WHEN 'test2' THEN 3
    WHEN 'test3' THEN 5
    END,
    colx = CASE col1
    WHEN 'test1' THEN 'xx'
    WHEN 'test2' THEN 'yy'
    WHEN 'test3' THEN 'zz'
    END
    WHERE col1 IN ('test1','test2','test3')
    
  2. ==============================

    2.이 지원하는 여러 행을 업데이트 할 수 있기 때문에, INSERT-ODKU (ON DUPLICATE KEY UPDATE)를 사용하는 것이 좋습니다.

    이 지원하는 여러 행을 업데이트 할 수 있기 때문에, INSERT-ODKU (ON DUPLICATE KEY UPDATE)를 사용하는 것이 좋습니다.

    모든 PK 컬럼의 값이 값에 있는지 확인하십시오 ().

    어디 가능한, 노예의 데이터로 SQL을 생성합니다.

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

    3.이에 CASE를 사용할 수 있습니다

    이에 CASE를 사용할 수 있습니다

    UPDATE test 
    SET col2 = CASE WHEN col1 = 'test1' THEN 1 ELSE 3 END 
    WHERE col1 IN ('test1', 'test2')
    

    또는 IF (MySQL은 전용)

    UPDATE test 
    SET col2 = IF(col1 = 'test1', 1, 3)
    WHERE col1 IN ('test1', 'test2')
    
  4. ==============================

    4.경우에 구조물이 너무 읽을 도착 양자 택일 할 때, 당신은 / 트랜잭션을 시작한다 수 있고 바로 업데이트는 순차적으로 수행.

    경우에 구조물이 너무 읽을 도착 양자 택일 할 때, 당신은 / 트랜잭션을 시작한다 수 있고 바로 업데이트는 순차적으로 수행.

    이것은 일반적으로 처음 문들이 안 다음 두 번째 문에서 일치하는 행을 생성하는 경우를 제외하고, 더 간단한 SQL을 초래한다. 그러나 이것은 귀하의 예제의 경우되지 않습니다.

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

    5.내가 그것을 어떻게입니다 :

    내가 그것을 어떻게입니다 :

    col4 다른 값을 갖는다 COL5 업데이트 COL1 (고정 값), COL2 (고정 값)와 COL3 (다른 값)는 정적이다.

    $someArray = ["a","b","c"];
    $anotherArray = [1,2,3];
    
    $sql = "UPDATE table SET col1 = '$staticValue1', col2 = '$staticValue2', col3 = CASE col4";
        $sqlEnd = " END WHERE col4 IN (";
        $seperator = ",";
        for ( $c = 0; $c < count($someArray); $c++ ) {
           $sql .= " WHEN " . "'" . $someArray[$c] . "'" . " THEN " . $anotherArray[$c];
           if ( $c === count($someArray) - 1 ) { 
              $separator = ") AND col5 = '$staticValue5'";
           }
            $sqlEnd .= "'" . $someArray[$c] . "'" . $seperator;
    
        }
        $sql .= $sqlEnd;
        $retval = mysqli_query( $conn, $sql);
        if(! $retval ) {
            /* handle error here */
        }
    

    그리고 MySQL의 쿼리에 대한 출력 문자열은 다음과 같이 될 것이다 :

    UPDATE table SET col1 = '1', col2 = '2', col3 = CASE col4 WHEN 'a' THEN 1 WHEN 'b' THEN 2 WHEN 'c' THEN 3 END WHERE col4 IN ('a','b','c') AND col5 = 'col5'
    
  6. ==============================

    6.

    UPDATE `wp_partners_tarif` SET  `name`="name1",`cena`="1",`comisiya`="11" WHERE `id`=2;
    UPDATE `wp_partners_tarif` SET  `name`="name2",`cena`="2",`comisiya`="22" WHERE `id`=3;
    UPDATE `wp_partners_tarif` SET  `name`="name2",`cena`="3",`comisiya`="33" WHERE `id`=4
    
  7. from https://stackoverflow.com/questions/18802671/update-multiple-rows-in-a-single-mysql-query by cc-by-sa and MIT license