在同一SELECT语句中使用始终为NULL,从不为NULL,有时为NULL的列

时间:2018-07-16 07:46:39

标签: sql postgresql fedora psycopg2

我在Fedora 27 64位系统上使用Python 3.6,PostgreSQL 9.6和Psycopg2 2.6.2。

我有一个名为my_query的SELECT查询,该查询从一个表中的约15列中提取数据。 中的几列可能为NULL。它写为

SELECT col_01, col_02, ... col_15  
FROM my_table  
WHERE (col_01, col_02, ... col_15) = (%s, %s, ... %s)

名为my_data的数据在元组中写为

(value_01, value_02, ... value_15)

我跑步时

cursor.execute(my_query, my_data)
cursor_result = cursor.fetchone()

cursor_result变成None

假设问题在于可为空的列,我从查询中删除了它们,并删除了数据,并且cursor_result不再是None

我还尝试了一个仅 可为空的列的查询;它产生的结果与原始查询相同:cursor_result变成了None

我的问题:有没有办法解决我的问题?我希望能够选择从不为NULL,始终为NULL或有时为NULL的列。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

SQL的ANSI 99标准引入了IS [NOT] DISTINCT FROM运算符,该运算符的行为与涉及非空值的相等比较相同,但将所有NULL视为相同(NOT DISTINCT,给出了奇怪的否定短语。

据我所知,大多数数据库产品尚不支持该运算符,但幸运的是,PostgreSQL does