NULLを除くDBテーブルの更新
-
19-08-2019 - |
質問
同じ列を持つ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)
所属していません StackOverflow