【发布时间】:2018-06-12 23:40:39
【问题描述】:
我是 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。
【问题讨论】:
-
您的实际预期输出是多少?您的第三个查询按预期工作。
-
我希望相同的查询接受 None 并给我 1,2 或者它应该取 1 并返回 0。我不知道根据输入更改查询的内容。如果您希望我进一步澄清,请告诉我。谢谢!
-
这对我来说毫无意义。你想匹配 NULL 还是 1?
-
我只想编写 1 个可以处理 NULL 和 1 的查询。我将在循环中使用相同的查询。例如,如果我给出 NULL,那么我希望我的数据库返回匹配的列值。如果输入为 1,那么我应该从数据库中获取 0。因为,我在查询中使用“或”,所以它返回 0,1,2。使用 or 的替代方法是什么?
-
你需要
is not distinct from而不是=,它可以处理NULL和非NULL值:postgresql.org/docs/current/static/functions-comparison.html
标签: python sql python-3.x postgresql