2016-08-09 4 views
0

私はrawと呼ばれるPSQLデータベースを持ち、カラムの1つはオプションで、タイプはVARCHARです。値は 'Call'、 'Put'、Noneのいずれかです。SQLクエリ - なしでカラム値をフィルタリングする

オプションフィールドの値が 'Call'または 'Put'ではなく、Noneである行をすべて選択したいとします。私が実行した場合

curr.execute('SELECT * FROM holdings h WHERE option != \'Call\' AND option != \'Put\';') 

何も

を返されません取得します:私はこのクエリを実行するとただし

curr.execute('SELECT * FROM holdings h WHERE option != \'Call\';') 

は、私が唯一のオプション値を持つそれらの行を取得する=

'入れ'

設定の違いを行わずに、オプションとして[なし]を使用して行を取得する方法を教えてください。理想的には、「通話」と「通話」以外の行を選択することができます。「通話」と「通話」の違いを呼び出すことなく呼び出すことができます。

ありがとう!

+0

はい実際のフィールドはNoneです。データベースを作成していたときは、 'Put'と 'Call'が値ではない場合、デフォルト値としてNoneを入れました – user3628240

+0

代わりに値としてnullを入れるべきですか? – user3628240

+0

'!='の代わりに['is distinct from'](https://wiki.postgresql.org/wiki/Is_distinct_from)を使用することを検討してください – Abelisto

答えて

0

あなたはnullオプションを使用して行を選択したい場合は、あなたがoption IS NULLによってこれを示す必要があります。

SELECT * FROM holdings WHERE option IS NULL 

代わりにあなたがoption NOT IN ('Call', 'Put')を使用することができますoption != 'Call' AND option != 'Put'の:

SELECT * FROM holdings WHERE option NOT IN ('Call', 'Put') 

と一緒に、このに参加OR

SELECT * FROM holdings WHERE option NOT IN ('Call', 'Put') OR option IS NULL 
0
SELECT * FROM holdings h WHERE option ='' 
関連する問題