2016-06-02 8 views
0

テーブルBが "USING" column_1と結合されたテーブルAがあります。私は私が使用してみました、クエリがCOLUMN_2の値がNOT EQUAL演算子を使用するとNULLを処理する

だから表BにCOLUMN_2、column_3又は接合された行のcolumn_4における任意の値と等しくない、表Aのすべての行を表示したい:

WHERE 
A.column_2 <> B.column_2 AND 
A.column_2 <> B.column_3 AND 
A.column_2 <> B.column_4 

B.column_2、B.column_3、およびB.column_4のすべてのセルに値があると、クエリのチェックが機能し、A.column_2の値にnoが含まれている表Aのすべての行がリストされますテーブルB内の一部のセルにNULL値がある場合、問題が発生します。結果は返されません。

23 <> NULL 

...そしてクエリがチェックのすべてがTRUEを返す例を探しているので、何も返さない:これは、MySQLは、以下がFALSEであると考えているためであると考えられます。

IFNULLの値が0のIFNULLで囲まれたテーブルBの列を配置することによって回避した回避策は次のとおりです。本来、NULLセルを0に変換するため、NOT EQUALチェック一致するものがなく、表Aの行が表示された場合はTRUEを正しく返します。コードは次のようになります。

WHERE 
A.column_2 <> IFNULL(B.column_2, 0) AND 
A.column_2 <> IFNULL(B.column_3, 0) AND 
A.column_2 <> IFNULL(B.column_4, 0) 

これは、これを処理するための丸ごとの方法であるようです。これを処理するより良い方法はありますか?

+0

を使用すると、COALESCE関数 –

+0

@JordanのIFNULLを使用することができます(ただ、)(ほとんどCOALESCEと同じです1値に制限されています。 – Shadow

答えて

0

< =>演算子を使用することもできます。

は、私が代わりにnot in演算子を使用します

MariaDB [(none)]> SELECT 1 <> 1 , 1 <> 0 , 0 <> 0, 0 <> NULL , NULL <> 0 , 0 <=> NULL, NULL <=> 0, NULL <=> NULL; 
+--------+--------+--------+-----------+-----------+------------+------------+---------------+ 
| 1 <> 1 | 1 <> 0 | 0 <> 0 | 0 <> NULL | NULL <> 0 | 0 <=> NULL | NULL <=> 0 | NULL <=> NULL | 
+--------+--------+--------+-----------+-----------+------------+------------+---------------+ 
|  0 |  1 |  0 |  NULL |  NULL |   0 |   0 |    1 | 
+--------+--------+--------+-----------+-----------+------------+------------+---------------+ 
1 row in set (0.00 sec) 

MariaDB [(none)]> 
+0

<=>はnull安全なequasion演算子です。あなたは、質問と同じ出力を達成するために、この演算子で非常に複雑な条件を作成しなければなりません。 – Shadow

0

を参照してください)

... WHERE A.column_2 NOT IN (B.column_2,B.column_3,B.column_4) 
+0

それはそれです!私はINとNOT INを他のものに使う。しかし、通常は静的な値のセットに入っています。私は、同じ方法でセルを参照できることを忘れています。いいことは、INが反対のものをチェックすること、すなわち一致するすべての行を表示することです。名誉! – PhoenixTech

+0

それから、plsは回答を受け入れたものとしてマークし、このトピックの他の視聴者に質問が解決されたことを示します。 – Shadow

+0

しました。しかし、評判ポイントが15に達するまでは、私が行ったことは示されません。 (私はまだここではまだ....) – PhoenixTech

関連する問題