이 될 것이라고 SQL 서버 구문이 될 나는이 이상 교차 확신하지만 MySQL은 다른 구문을 제안 몇 가지 기사를 보았다. 그러나 기본적으로 join
또는 where
절을 사용하여 relate
테이블을 만든 다음 case
문을 사용하여 값을 선택하십시오. 아래의 솔루션에서는 case
문을 ELSE
절대로 사용하지 않지만 좋은 측정 값은 join
과 일치하지만 현재 case
문 조건과 일치하는 항목의 현재 열 값을 참조합니다. A는 조인을 사용하지 않는 당신의 코멘트 당
UPDATE a
SET Column1 = CASE
WHEN b.Column1 = 1111 THEN b.Column2
WHEN b.Column1 = 2222 THEN b.Column3
ELSE a.Column1
END
FROM
[DatabaseA].TableA a
INNER JOIN [DatabaseB].TableB b
ON a.Column4 = b.Column4
AND (
(b.Column1 = 1111 AND b.Column2 IS NOT NULL)
OR
(b.Column1 = 2222 AND b.Column3 IS NOT NULL)
)
가입하여
.
UPDATE a
SET Column1 = CASE
WHEN b.Column1 = 1111 THEN (SELECT b.Column2 FROM TableB WHERE b.Column4 = a.Column4)
WHEN b.Column1 = 2222 THEN (SELECT b.Column3 FROM TableB WHERE b.Column4 = a.Column4)
ELSE a.Column1
END
FROM
TableA
WHERE
EXISTS (
SELECT *
FROM
TableB
WHERE
b.Colmn4 = a.Column4
AND (
(b.Column1 = 1111 AND b.Column2 IS NOT NULL)
OR
(b.Column1 = 2222 AND b.Column3 IS NOT NULL)
)
미친 것처럼 보이지만 의도 한 행만 업데이트됩니다. 그렇지 않으면 전체 열을 업데이트해도 상관 없으면 다음과 같이 할 수 있습니다. 당신은 전체 테이블을 갱신하고자하는 경우
UPDATE a
SET Column1 = CASE
WHEN b.Column1 = 1111 THEN ISNULL((SELECT b.Column2 FROM TableB WHERE b.Column4 = a.Column4 AND b.Column1 = 1111),a.Column1)
WHEN b.Column1 = 2222 THEN ISNULL((SELECT b.Column3 FROM TableB WHERE b.Column4 = a.Column4 AND b.Column1 = 2222),a.Column1)
ELSE a.Column1
END
FROM
TableA
당신은 하나의 부속와 함께 할 수도 있습니다. 이 모든 대답에
UPDATE a
SET Column1 = ISNULL(
( SELECT (CASE WHEN b.Column1 = 1111 THEN b.Column2 ELSE b.Column3 END)
FROM
TableB
WHERE
b.Colmn4 = a.Column4
AND (
(b.Column1 = 1111 AND b.Column2 IS NOT NULL)
OR
(b.Column1 = 2222 AND b.Column3 IS NOT NULL)
)
),a.Column1)
FROM
TableA
트릭은 당신이 그렇지 않으면 당신이 의도 한 결과를 얻을 수 없습니다 TableA의와 TableB의의 SELECT 문을 연관시킬 수 있어야한다.
여기에있는 것처럼 다른 조건에서 쿼리가 값을 설정할 수 있도록하려면 case 문을 사용합니다. 이것은 귀하의 문제와 유사합니다 : http://stackoverflow.com/questions/35533828/how-to-combine-two-update-queries-having-different-where-condition. – Dresden
쿼리가 지금 읽기 때문에 tableA와 tableB 사이에 연결이 없습니다. 그 맞습니까? – nscheaffer
@Dresden 사례 문장을 통해 "어디에서 선택 하시겠습니까?" –