답변은 새로운 값의 출처에 따라 크게 달라집니다. 당신은 새로운 가치의 짧은 목록이있는 경우
, 당신은 CASE
를 사용할 수 있습니다 : 새 값의 목록이 매우 긴 경우
는
UPDATE Table1
SET column1 = CASE column1
WHEN 123 THEN ?
WHEN 456 THEN ?
ELSE ?
END;
이 실용적이지 못하다.다른 테이블의 상관 관계 행에 존재하는 값으로 행을 업데이트해야하는 경우
, 당신은 MySQL을의 멀티 테이블 UPDATE 구문을 사용할 수 있습니다 :
UPDATE Table1 JOIN Table2 ON (Table1.pk = Table2.fk)
SET Table1.column1 = Table2.column2;
또한 상관 하위 쿼리와 비슷한 작업을 수행 할 수 있습니다. 나는 (그것을 멀티 테이블 갱신 또는 하위 쿼리를 지원하기 전에) 3.23을 사용하는 경우
UPDATE Table1 SET column1 = (SELECT column2 FROM Table2 WHERE Table2.fk = Table1.pk);
오래 전, 내가 출력이 UPDATE 문을 완전히 형성 한 SELECT
를 실행하는 것입니다. 모든 따옴표를 올바르게 작성하는 것은 까다로운 일 이었지만 결과는 수백 개의 개별 UPDATE 문의 SQL 스크립트였으며 각 행은 각각 하나의 행에서 값이 변경되었습니다. 별로 효율적이지는 않지만 드물게 수행해야하는 경우라면 괜찮습니다.
SELECT CONCAT(
'UPDATE Table1 SET column1 = ', QUOTE(Table2.column2),
' WHERE pk = ', Table2.fk, ';') AS SQL_statement
FROM Table2;
좀 더 자세한 정보가 필요합니다. 3에서 4로 변경하는 것처럼 필드를 증가시키고 있습니까? 모든 행이 동일한 "새로운"값을 얻고 있습니까? 새 값과 해당 기본 키 (또는 다른 필드)가 포함 된 데이터 집합이 있습니까? – sberry