当前位置: 首页 > 面试题库 >

用可以为null的列测试不等式

郭俊拔
2023-03-14
问题内容

因此,今天早上我问了一个问题,我没有正确说出这句话,所以我得到了很多关于为什么将NULL与任何东西相比会赋予NULL / FALSE的回答。

我的实际问题是,数据库专家测试两列都可以为NULL的不等式的时间受尊敬的方式是什么?我的问题与这个问题完全相反。

要求如下,A和B为两列:
a)如果A和B都为NULL,它们相等,则返回FALSE
b)如果A和B都不为NULL,则返回A <> B
c)如果A或B为NULL,它们不相等,返回TRUE


问题答案:

根据数据类型和列的可能值:

COALESCE(A, -1) <> COALESCE(B, -1)

诀窍是找到一个 永远不会 出现在您的数据中的值(在这里我使用了-1)。

另一种方法是:

(A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL)

这可能是一个问题,具体取决于您的特定RDBMS处理NULL的方式。按照ANSI标准,这应该可以为您提供所需的信息,但是无论如何,谁会遵循标准。:)

PS-我还应该指出,使用COALESCE函数可能会使比较列时索引的使用无效。检查您的查询计划和查询性能,看是否有问题。

PPS-我刚刚注意到OMG Ponies提到Informix不支持COALESCE。我相信这是一个ANSI标准函数,但请参阅我上面对标准所说的…



 类似资料:
  • 问题内容: 我有一个表,其中有几个ID列指向其他表。 我希望 只有 在将数据放入其中时,外键才能强制完整性。如果我稍后进行更新以填充该列,则它还应该检查约束。 (这可能取决于数据库服务器,我使用的是MySQL和InnoDB表类型) 我相信这是一个合理的期望,但是如果我错了,请纠正我。 问题答案: 是的,您只能在值不为NULL时强制执行约束。可以使用以下示例轻松测试它: 第一次插入将通过,因为我们在

  • 问题内容: 我正在阅读本文: 在SQL中获取null == null 共识是,当尝试测试两个(可空)sql列之间的相等性时,正确的方法是: 当A和B为时,(A = B)仍返回FALSE,因为NULL不等于NULL。这就是为什么需要额外检查的原因。 检验不平等情况如何?经过以上讨论,我认为要测试不平等,我需要做一些类似的事情: 但是,我注意到这不是必需的(至少在informix 11.5上没有),我

  • 问题内容: 我正在修改MySQL语句,但LEFT JOIN和空白行有一些麻烦。目前,我有: 只要“ tblguardians”表中有一个条目,该查询就可以正常工作,但是如果没有记录,则LEFT JOIN返回NULL- 因此,当我遍历PHP中的结果时,不会返回该条目。 有没有一种方法可以从“ tblcases”返回字段,而无论“ tblguardians”是否有关联的结果?我想我已经读了太多的Goo

  • 我有一些可为空的值,希望在访问它们的值时避免异常。下面展示了我想要实现的一个示例。我目前有 但我看到可为空的值有一个属性。等价物将是 有什么方法可以把代码简化成这样吗? 以便它只在不为空时运行?

  • 我还在学习,所以不要严格评判) 两个问题:1)映射中的错误--没有将列表对象设置为镜像对象(在一个方向上列表是空的,在另一个方向上列表长度超出界限0)2)对象层次结构映射的优化 我想将其映射到DTO中,如下所示:(实际上是一对一) 为了做到这一点,我把这些映射器堆在下面。-这是第一个问题:-在MapStruct中,如何正确地从根实体BusinessEntity继承映射,它是系统中所有记帐对象的祖先

  • 我有这个类定义 其中保留是一个简单的Pojo ........ 原因:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类org.mockito.internal.debugging.locationImpl的序列化程序,也找不到创建BeanSerializer的属性(若要避免异常,请禁用SerializationFe