문제

열이 같은 두 개의 테이블이 있습니다

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top