对列对进行比较,尝试找到不匹配的
SELECT
RecID,
Field1,
Field2
FROM
TestTable
WHERE
Field1 != Field2
但是我想在我的支票中加入Nulls。两列中的空都有效,但是在一列中为空而在另一列中为空则无效,因此需要包含在输出中
SELECT
RecID,
Field1,
Field2
FROM
TestTable
WHERE
(Field1 != Field2)
OR (Field1 IS NULL AND Field2 IS NOT NULL)
OR (Field1 IS NOT NULL AND Field2 IS NULL)
这是写这篇文章的最佳方式,还是有更简洁/更好的方法来进行Null
/ Not Null
比较?
答案 0 :(得分:2)
我认为你可以用更浓缩的方式编写过滤条件:
SELECT
ID,
Field1,
Field2
FROM
TestTable
WHERE
NOT((Field1 = Field2) OR (Field1 IS NULL AND Field2 IS NULL))
;
但是,此查询将产生不正确的结果。 你的变体是正确的。
@Heinzi和Connect item提到的IS DISTINCT FROM
提议的INTERSECT
运算符与Paul White的一篇非常好的帖子有关:this answer。
在那篇文章中Paul解释说查询处理器已经有了这个运算符,用于SELECT
ID,
Field1,
Field2
FROM
TestTable AS T
WHERE
NOT EXISTS
(
SELECT T.Field1
INTERSECT
SELECT T.Field2
)
;
个查询。
您的示例可以重写为:
android:layout_marginBottom with android:layout_alignParentBottom="true"
答案 1 :(得分:1)
在SQL Server的未来版本中,希望有一个IS DISTINCT FROM
运算符。 Go ahead and vote for it, if you like.
在此之前,你唯一的选择是解决它,就像你已经做的那样。还有其他方法可以编写它 - 另一个common variant是(a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL)
- 但我认为你必须更具可读性的解决方案。