SQL 比较和空值的问题

2024-02-26

我有一个更新查询,当一个表中的值与另一表中的字段不匹配时,该查询会更新一个表中的字段。

UPDATE  table1
SET     a.field1 = b.field3
FROM    table1 a ,
        table2 b
WHERE   a.field2 = b.field2
        AND a.field1 <> b.field3

我遇到的问题是,当 a.field1 为 null 且 b.field3 为值或 a.field1 为值且 b.field3 为 null 时,它不会被拾取。

我通过添加以下内容解决了这个问题......

UPDATE  table1
SET     a.field1 = b.field3
FROM    table1 a ,
        table2 b
WHERE   a.field2 = b.field2
        AND ( a.field1 <> b.field3
              OR (a.field1 IS NOT NULL
              AND b.field3 IS NULL)
              OR (a.field1 IS NULL
              AND b.field3 IS NOT NULL)
            )

我的问题更集中在为什么会发生这种情况以及如何最好地构建查询以防止这种情况发生?


问题在于 NULL 比较。如果 a.field1 或 b.field3 为 NULL,则需要使用 IS NULL 或 IS NOT NULL 语句。您可以使用 ISNULL 函数为 a.field1 和 b.field3 使用默认值。

ISNULL(a.field1,0) <> ISNULL(b.field3,0)

在本例中,与值 0 进行比较。

SELECT IIF(NULL=NULL,'true','false')  -- The result is false.  Amazing!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 比较和空值的问题 的相关文章

  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • SQL 查询结果为字符串(或变量)

    是否可以将SQL查询结果输出到一个字符串或变量中 我的php和mysql不好 假设我有数据库 agents 其中包含列 agent id agent fname agent lname agent dept 使用此查询 sql SELECT
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • SQL Server 标识列值从 0 而不是 1 开始

    我遇到了一个奇怪的情况 数据库中的某些表的 ID 从 0 开始 即使 TABLE CREATE 的 IDENTITY 1 1 也是如此 对于某些表来说是这样 但对于其他表则不然 它一直有效到今天 我尝试过重置身份列 DBCC CHECKID
  • 结果集未打开。验证自动提交已关闭。阿帕奇·德布里

    我的数据库使用 apache derby 我能够对数据库执行插入操作 以下是尝试显示我唯一的表 MAINTAB 的内容的代码摘录 java sql Connection 的实例是 dbconn ResultSet word Statemen
  • 从 SQL Server 2012 查询结果中减去小时数

    我正在 SQL Server 2012 Management Studio 中的警报系统信号自动化平台数据库上运行查询 但遇到了一些问题 我的查询运行得很好 但我无法将结果细化到我想要的水平 我正在选择一些格式为的列DATETIME 我只想
  • Oracle SQL——从字符串中删除部分重复项

    我有一个表 其中有一列包含字符串 如下所示 static text here 1abcdefg1abcdefgpxq 从这个字符串1abcdefg重复两次 所以我想删除该部分字符串 然后返回 static text here 1abcdef
  • SQL 更新数据集中的位置

    id1 id2 bool 1 1 F 1 2 F 2 1 F UPDATE table name SET bool T WHERE id1 id2 IN 1 1 2 1 Need work here 所以基本上我想选择条件为 id1 id2
  • SQL Server 2012(代号:Denali)CTP 3的FIRST_VALUE和LAST_VALUE的实际用途是什么

    随着 Denali 的 CTP 3 版本的发布 我们有了更多的分析功能 其中我对其中两个感兴趣 a 第一个值 http msdn microsoft com en us library hh213018 28v SQL 110 29 asp
  • 我不确定在 SQL 中声明这些变量时出了什么问题

    我有以下代码 USE pricingdb go CREATE TABLE dbo Events 060107 2012 Date Time varchar 20 COLLATE SQL Latin1 General CP1 CI AS NU
  • 删除原始数据中部分重复的记录

    我需要删除表中时间间隔为 1 或 2 分钟或相同且必须相同的所有记录ID但保留第一个记录 ID Time SN SD WE FW 10 2014 06 30 19 17 37 000 I 0 100 0 10 2014 06 30 19 1
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个
  • 如何在没有 EF 的 ASP.NET MVC 中使用普通 sql?

    我有一个使用 linq to sql 的类 如何在 ASP NET MVC 3 中使用普通 sql 而不使用 EF 来实现相同的功能 public ActionResult Index var List from c in db OFFIC
  • Oracle:如何查找模式中上次更新(任何表)的时间戳?

    有一个Oracle数据库模式 数据很小 但仍然有10 15个表左右 它包含一种配置 路由表 有一个应用程序必须不时轮询此架构 不得使用通知 如果架构中没有数据更新 应用程序应使用其当前的内存版本 如果任何表有任何更新 应用程序应将所有表重新
  • Oracle 获取列值发生变化的行

    假设我有一张桌子 比如 ID CCTR DATE 1 2C 8 1 2018 2 2C 7 2 2018 3 2C 5 4 2017 4 2B 3 2 2017 5 2B 1 1 2017 6 UC 11 23 2016 还有其他字段 但我
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • MySQL 子查询返回多行

    我正在执行这个查询 SELECT voterfile county Name voterfile precienct PREC ID voterfile precienct Name COUNT SELECT voterfile voter
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7

随机推荐