选择IS NULL和值

时间:2018-06-12 23:40:39

标签: python sql python-3.x postgresql

我是PostgreSQL的初学者,对我来说这是一个关键问题。

我的表格如下:

test num_1 num_2
0    1     1
1
2

我的数据库中的多个列具有NULL或非NULL值。我想只使用一个查询读出test,它可以接受NULL和非NULL值。

查询应具有以下功能:

首先查询:

x = 1
sql = ("""SELECT test FROM table WHERE num_1 = %s""")
df = pd.read_sql(sql, con = db, params = (x))

它应该返回0.

第二次查询:

x = None
sql = ("""SELECT test FROM table WHERE num_1 IS NULL""")
df = pd.read_sql(sql, con = db, params = (x))

它应该返回1,2

如何只使用一个查询来实现这一目标?我尝试了以下代码,但它无法正常工作:

x = None
sql = ("""SELECT test FROM table WHERE num_1 = %s or num_1 IS NULL """)
df = pd.read_sql(sql, con = db, params = (x))

返回0,1,2。我相信它正在发生,因为查询中的“或”。我想只有一个查询可以处理或同时使用NULL或值。

如果我查询NULL,它应该返回1,2,如果我查询1,它应该返回0。我不想要0,1,2

1 个答案:

答案 0 :(得分:2)

这是IS NOT DISTINCT FROM的情况,就像一样,将NULL视为正常值:

=

缺点是这种情况不能使用索引。

如果您需要使用索引,可以编写

SELECT test FROM table WHERE num_1 IS NOT DISTINCT FROM %s
相关问题