私はNOT NULL ''> <対間違いについてたくさん読みましたPostgresqlのNULL AND <> 'NOT' 対NULL OR <>はありません ''
それはにあったために私が見つけた最良の説明:
述べhttps://www.postgresql.org/message-id/[email protected]:
NULL質問は、このように何 答えはありません、まだ回答されていないことを意味、あなたは本当に が言うことができないので、それが提供されるとの答えがあるかもしれません答えは空です。空の場合は答えが与えられており、答えが空の場合は となります。私は有効な郵便番号のみの結果をフィルタ処理しようとしていた、働いているテーブルの場合
(郵便番号は、この特定のテーブルのVARCHARです)、私は次のことを試してみました:
SELECT postcode FROM customer_table_1
WHERE postcode IS NOT NULL OR postcode <> '';
しかし、これは私の結果にいくつかの空白のポストコードを与えます。
SELECT postcode FROM customer_table_1
WHERE postcode <>'';
は結果だけで有効な郵便番号を与えるのに対し、このダウンを破る...
SELECT postcode FROM customer_table_1
WHERE postcode IS NOT NULL;
は、いくつかの空白の郵便番号を提供します。したがって、クエリのIS NOT NULL部分は、私が思っていたことをしていません。
より複雑なクエリの一部として、私が以前に使用しています
SELECT postcode FROM customer_table_1
WHERE postcode IS NOT NULL AND postcode <> '';
をし、望ましい結果を達成しました。しかし、私はいつもそれが私が(つまり空でないNULLまたはNOT文字列で)有効な郵便番号を持つすべてのレコードを探していますので
SELECT postcode FROM customer_table_1
WHERE postcode IS NOT NULL OR postcode <> '';
をする必要がありますこれらのではなく、OR文で接続するべきではないと思っていますそして?私はNULLと空の文字列の両方であるポストコードを探しているわけではありません。
愚かな質問の場合は、ANDを使用しても私には論理的ではないように見えます。結果の背後にあるプロセスを理解していないと、盲目的に何かをしたくありません。私はNOT NULLと<の違いを完全に理解していると思っていましたが、Postgresが関連するほとんどのものと同じように、私は実際には分かりません。
'arg!= val1またはarg!= val2'は、' arg'が 'null'または' val1 = val2'を除いて常に真です。 'postcode'がヌルでない場合、' or'演算子の2番目の式無視することができます。だからあなたは 'と'を使うことを推測します。または 'not(postcodeはヌルかpostcode = '')です。さらに別のアプローチ: 'nullif(postcode、 '')がヌルでないか' coalesce(postcode、 '')<> '' 'しかし、これはインデックスをチューニングする必要があります。 – Abelisto