널을 제외한 DB 테이블 업데이트
-
19-08-2019 - |
문제
열이 같은 두 개의 테이블이 있습니다
tbl_source (ID, Title)
tbl_dest (ID, Title)
Dest and Source의 ID가 일치하는 TBL_SOURCE에서 TBL_DEST 타이틀을 업데이트하고 싶습니다. 그러나 소스 제목이 NULL (또는 공백) 인 경우 DEST 제목을 업데이트하고 싶지 않습니다.
나는 이것을 얻었다 :
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
그러나 널을 계속 삽입합니다.
그런 쿼리를 어떻게 구성합니까?
SQL Server 2005를 사용하고 있습니다.
감사.
해결책
내부 조인을 사용하십시오 ...
Update tbl_dest
Set tbl_dest.Title = tbl_source.Title
From tbl_dest inner join tbl_source on tbl_dest.ID = tbl_source.ID
Where tbl_source.Title is not null and tbl_source.Title <> ''
다른 팁
하위 쿼리가 NULL을 반환하고 업데이트 절에서 레코드를 필터링하지 않기 때문에 값을 NULL로 설정하고 있습니다.
대신 이와 같은 것을 시도하십시오.
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id)
WHERE EXISTS
(SELECT 1
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id
AND tbl_source.title IS NOT NULL)
외부 쿼리가 모든 레코드 (Where 절 없음)를 업데이트하기 때문에 내부 쿼리가 일치하는 레코드를 찾지 못하면 NULL이 삽입됩니다.
해당 레코드에 대한 업데이트를 수행하지 않으려면 외부 쿼리에 WHERE 절을 추가하십시오.
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
WHERE EXISTS
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
제휴하지 않습니다 StackOverflow