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

Use columns that are always NULL, never NULL, and sometimes NULL in the same SELECT statement

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

我有一个名为 my_query 的 SELECT 查询,它从一个 table 中的大约 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.

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

预先感谢您的帮助。

SQL 的 ANSI 99 标准引入了 IS [NOT] DISTINCT FROM 运算符,其行为与涉及非空值的相等比较相同,但将所有 NULL 视为相同( NOT DISTINCT,考虑到奇怪的负面措辞)。

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