【发布时间】:2019-08-14 16:18:20
【问题描述】:
我有一个包含(除其他外)十个字段的 SQL 查询,称它们为 v1、...、v10,我想对其进行测试。预期的情况是大多数为 NULL,其余的值都相等。我正在寻找的有趣(错误?)情况是至少有两个不相等的非 NULL 值。
有没有比这个更好的方法
v1 != v2 or v1 != v3 or ... v8 != v9 or v8 != v10 or v9 != v10
二项式 (10, 2) = 总共 45 个条件?
除了不优雅之外,它似乎很脆弱——而且刚刚调试了一个问题,即长列表中的一个变量有错字,而不仅仅是学术问题。但如果这是唯一可行的方法……虽然如果列表扩展到 20 则就不那么好了。
【问题讨论】:
-
一定要用SQL写吗?
-
每列有唯一的 id 吗?
-
@mkRabbani 是的——在我的例子中实际上是一个复合 id,但你可以假设一个字段 unique_id 存在。
-
我有一个想法,但我不确定是否可行,我现在不能自己尝试。你可以写类似
v1 NOT IN (v2, v3, v4 ...) or v2 NOT IN (v1, v3, ...) -
@ArnaudClaudel NOT IN 不是 NULL safe
标签: sql oracle dry maintainability