我是PostgreSQL的初学者,这对我来说是一个关键问题。
我的表看起来像这样:
test num_1 num_2
0 1 1
1
2
我的数据库中有几列有NULL或非NULL值。我只想用一个查询读出test
,它既可以接受空值,也可以接受非空值。
查询应该具有以下给定的功能:
第一个查询:
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
。我相信这是因为查询中的"or“。我希望只有一个查询可以处理或接受NULL或值。
如果我查询NULL,它应该返回1,2
,如果我查询1
,它应该返回0
。我不想要0,1,2
。
发布于 2018-06-13 10:23:09
这是IS NOT DISTINCT FROM
的一个例子,它就像一个将NULL视为正常值的=
:
SELECT test FROM table WHERE num_1 IS NOT DISTINCT FROM %s
缺点是这个条件不能使用索引。
如果需要使用索引,可以编写
SELECT test FROM table WHERE num_1 = %s
UNION ALL
SELECT test FROM table WHERE num_1 IS NULL AND %s IS NULL
https://stackoverflow.com/questions/50827270
复制相似问题