[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.이것은 가장 명확한 방법입니다
이것은 가장 명확한 방법입니다
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.이 지원하는 여러 행을 업데이트 할 수 있기 때문에, INSERT-ODKU (ON DUPLICATE KEY UPDATE)를 사용하는 것이 좋습니다.
이 지원하는 여러 행을 업데이트 할 수 있기 때문에, INSERT-ODKU (ON DUPLICATE KEY UPDATE)를 사용하는 것이 좋습니다.
모든 PK 컬럼의 값이 값에 있는지 확인하십시오 ().
어디 가능한, 노예의 데이터로 SQL을 생성합니다.
-
==============================
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.경우에 구조물이 너무 읽을 도착 양자 택일 할 때, 당신은 / 트랜잭션을 시작한다 수 있고 바로 업데이트는 순차적으로 수행.
경우에 구조물이 너무 읽을 도착 양자 택일 할 때, 당신은 / 트랜잭션을 시작한다 수 있고 바로 업데이트는 순차적으로 수행.
이것은 일반적으로 처음 문들이 안 다음 두 번째 문에서 일치하는 행을 생성하는 경우를 제외하고, 더 간단한 SQL을 초래한다. 그러나 이것은 귀하의 예제의 경우되지 않습니다.
-
==============================
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.
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
from https://stackoverflow.com/questions/18802671/update-multiple-rows-in-a-single-mysql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 때 당신은 테이블 반환 함수를 사용해야합니까? [닫은] (0) | 2020.07.01 |
---|---|
[SQL] VARCHAR2 (n 개의 BYTE | CHAR) 기본 -> CHAR 또는 BYTE (0) | 2020.07.01 |
[SQL] 어떻게 SQL 서버에서 날짜 필터링의 성능을 향상시키기 위해? (0) | 2020.07.01 |
[SQL] SQL 주입은 위험이 오늘인가? (0) | 2020.07.01 |
[SQL] .NET에서 인 메모리 데이터베이스 [폐쇄] (0) | 2020.07.01 |