0

对不起,如果这是非常基本的。这是我注意到的以下是表格:

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 但它什么也没显示我很困惑假设我想在一个表对其他表值具有空值时查看所有值我该怎么做。

4

4 回答 4

3

好吧,问题是与 NULL 的比较总是导致 FALSE,除了IS NULL. 所以该子句应该是:

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)
        );
于 2013-01-31T16:18:53.567 回答
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

要全面了解联接,请访问以下链接:

于 2013-01-31T16:17:12.823 回答
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));
于 2013-01-31T16:20:14.840 回答
1

Null 值是特殊的。你可以用一个复杂的查询来做到这一点,比如

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);

链接到 SQLFiddle

请注意,语法会有所不同,具体取决于您使用的 SQL 风格。

于 2013-01-31T16:23:05.897 回答