【问题标题】:Updating a DB table excluding NULLs更新不包括 NULL 的数据库表
【发布时间】:2009-01-16 20:19:27
【问题描述】:

我有两个具有相同列的表

tbl_source (ID, Title)

tbl_dest (ID, Title)

我想从 tbl_source 更新 tbl_dest 标题,其中 dest 和 source 中的 id 匹配。但是,如果源标题为空(或空白),我不想更新目标标题。

我有这个:

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。

谢谢。

【问题讨论】:

    标签: sql sql-server-2005 sql-update


    【解决方案1】:

    使用内连接...

    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 <> ''
    

    【讨论】:

      【解决方案2】:

      将值设置为 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)
      

      【讨论】:

        【解决方案3】:

        这是因为外部查询正在更新每条记录(没有 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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-03
          相关资源
          最近更新 更多