在同一 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
我在 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