我是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
。
答案 0 :(得分:2)
这是IS NOT DISTINCT FROM
的情况,就像一样,将NULL视为正常值:
=
缺点是这种情况不能使用索引。
如果您需要使用索引,可以编写
SELECT test FROM table WHERE num_1 IS NOT DISTINCT FROM %s