很抱歉,如果这是非常基本的。 这是我注意到的 以下是表格:
Table1 Table2
ID Value ID Value
1 (null) 1 0
2 2 2 2
3 (null) 3 3
所以我使用了以下声明:
Select T1.ID,T1.Value,T2.value
from
Table1 T1,
Table2 T2
where
T1.ID=T2.ID
and T1.Value<>T2.Value;
我期待输出显示1,3 ID,但它没有显示任何不是我很困惑假设我想看到所有值当一个表为其他表值为null时我该怎么做。
答案 0 :(得分:3)
嗯,问题是除了IS NULL
之外,与NULL的比较总是导致FALSE。所以该条款应该是:
where T1.ID=T2.ID and
coalesce(T1.Value, t2.value - 1) <> coalesce(T2.Value, t1.value -1);
或者与NULL值匹配的东西。
顺便说一句,您还应该使用正确的连接语法。因此,查询看起来应该更像:
Select T1.ID,T1.Value,T2.value
from Table1 T1 join
Table2 T2
on T1.ID=T2.ID and
((T1.Value <> T2.Value) or
(t1.value is not null and t2.value is null) or
(t1.value is null and t2.value is not null)
);
答案 1 :(得分:2)
您必须使用LEFT JOIN
而不是INNER JOIN
,因为您要查找不匹配的值。
Select t1.ID,T1.Value,T2.value
from Table1 T1
LEFT JOIN Table2 T2
ON T1.ID=T2.ID AND
t1.value = t2.value
where t2.value IS NULL
要充分了解联接知识,请访问以下链接:
答案 2 :(得分:2)
Select T1.ID,T1.Value,T2.value
from
Table1 T1,
Table2 T2
where
T1.ID=T2.ID
and (T1.Value<>T2.Value OR (T1.Value IS NULL AND T2.Value IS NOT NULL) OR (T2.Value IS NULL AND T1.Value IS NOT NULL));
答案 3 :(得分:1)
空值很特殊。你可以使用像
这样的复杂查询来完成Select T1.ID,T1.Value,T2.value
from
Table1 T1,
Table2 T2
where
T1.ID=T2.ID
and ((t1.value is null or t2.value is null)
and !(t1.value is null and t2.value is null)
or t1.value <> t2.value);
请注意,语法会有所不同,具体取决于您使用的SQL的风格。