首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有空值和值的Select查询

带有空值和值的Select查询
EN

Stack Overflow用户
提问于 2018-06-13 07:40:39
回答 1查看 539关注 0票数 3

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

我的表看起来像这样:

代码语言:javascript
复制
test num_1 num_2
0    1     1
1
2

我的数据库中有几列有NULL或非NULL值。我只想用一个查询读出test,它既可以接受空值,也可以接受非空值。

查询应该具有以下给定的功能:

第一个查询:

代码语言:javascript
复制
x = 1
sql = ("""SELECT test FROM table WHERE num_1 = %s""")
df = pd.read_sql(sql, con = db, params = (x))

它应该返回0。

第二个查询:

代码语言:javascript
复制
x = None
sql = ("""SELECT test FROM table WHERE num_1 IS NULL""")
df = pd.read_sql(sql, con = db, params = (x))

它应该返回1,2

如何仅用一个查询就能做到这一点?我尝试了下面的代码,但它不能正常工作:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 10:23:09

这是IS NOT DISTINCT FROM的一个例子,它就像一个将NULL视为正常值的=

代码语言:javascript
复制
SELECT test FROM table WHERE num_1 IS NOT DISTINCT FROM %s

缺点是这个条件不能使用索引。

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

代码语言:javascript
复制
SELECT test FROM table WHERE num_1 = %s
UNION ALL
SELECT test FROM table WHERE num_1 IS NULL AND %s IS NULL
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50827270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档