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が表示されることを期待していましたが、何も表示されませんでした.1つのテーブルに他のテーブルの値がnullの場合、すべての値を表示したいと思います.

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 に答える