質問

同じ列を持つ2つのテーブルがあります

tbl_source (ID, Title)

tbl_dest (ID, Title)

destと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)

ただし、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