0

同じ列を持つ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)

しかし、ヌルを挿入し続けます。

このようなクエリを作成するにはどうすればよいですか?

SQL Server 2005 を使用しています。

ありがとう。

4

3 に答える 3

5

内部結合を使用する...

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 <> ''
于 2009-01-16T20:24:28.237 に答える
0

サブクエリが 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)
于 2009-01-16T20:26:28.030 に答える
0

これは、外側のクエリがすべてのレコードを更新しているため (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)
于 2009-01-16T20:26:48.793 に答える