문제

단일 SQL 쿼리를 사용하여 각 행마다 다른 값으로 여러 행을 업데이트하는 방법이 있습니까? 다른 데이터로 많은 행으로 하나의 Colum을 업데이트해야합니다. 각 행에 개별 업데이트 쿼리를 사용하는 것은 과도한 것처럼 보이 므로이 프로세스를 단일 SQL 문으로 통합하거나 최소한 필요한 쿼리 수를 줄이려고합니다.

Zend Framework 및 MySQL과 함께 PHP를 사용하고 있습니다.

도움이 되었습니까?

해결책

임시 테이블을 만들고 다음과 같이 채우십시오.

CREATE TEMPORARY TABLE temptable (id INTEGER, VALUE VARCHAR(200))

INSERT
INTO temptable
VALUES
  ('1', 'val1'),
  ('2', 'val2'),
  ('3', 'val3'),
  ('4', 'val4')

그런 다음 발행 :

UPDATE
  mytable m, temptable t
SET m.value = t.value
WHERE m.id = t.id

다른 팁

MySQL에 대해 구체적으로 알지 못하지만 선택 또는 여러 선택을 기반으로 여러 행을 업데이트하려면 여러 행을 업데이트하려면

UPDATE U
SET MyColumn = T.OtherColumn
FROM MyUpdateTable AS U
     JOIN
     (
         SELECT [OtherColumn] = OtherColumn1
         FROM MyOtherTable1
         WHERE ...
         UNION
         SELECT OtherColumn2
         FROM MyOtherTable2
         WHERE ...
     ) AS T
         ON T.ID = U.ID

2014 년 10 월 28 일 업데이트, MySQL 작업으로 변환되었습니다.

UPDATE MyUpdateTable AS U
    JOIN
    (
        SELECT [OtherColumn] = OtherColumn1
        FROM MyOtherTable1
        WHERE ...
        UNION
        SELECT OtherColumn2
        FROM MyOtherTable2
        WHERE ...
    ) AS T
        ON T.ID = U.ID
        SET MyColumn = T.OtherColumn

이것이 SQL Server에서 작동한다는 것을 알고 있으므로 MySQL에서 시도해 볼 가치가 있습니다.

update xtable
set a = 
   Case
     when a = "a"
     then z
     when a = "b"
     then y
   End
where ...

다른 행을 기반으로 CASE 문을 구성 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top