Python 选择带有为NULL和值的查询
我是PostgreSQL的初学者,这对我来说是一个关键问题 我的桌子看起来像这样:Python 选择带有为NULL和值的查询,python,sql,python-3.x,postgresql,Python,Sql,Python 3.x,Postgresql,我是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 = (
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
。我相信这是因为查询中的“或”。我希望只有一个查询可以处理或接受NULL或a值
如果我查询NULL,它应该返回1,2
,如果我查询1
,它应该返回0
。我不想要0,1,2
这种情况就像=
将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
你的实际预期产出是多少?您的第三个查询正在按预期工作。我希望同一个查询接受None并给我1,2,否则它应该接受1并返回0。我不知道如何根据输入更改查询。如果你想让我进一步澄清,请让我知道。谢谢这对我来说毫无意义。您想匹配NULL还是1?我只想编写一个查询,可以处理NULL和1。我将在循环中使用相同的查询。例如,如果我给NULL,那么我希望我的数据库返回匹配的列值。如果输入是1,那么我应该从数据库中获取0。因为我在查询中使用了“or”,所以它返回0,1,2。使用or的替代方法是什么?您需要
与没有区别,而不是=
,它可以处理空值和非空值: