首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL:如果值可以为空,如何按值选择

SQL:如果值可以为空,如何按值选择
EN

Stack Overflow用户
提问于 2018-06-04 01:06:09
回答 2查看 370关注 0票数 0

我有一个数据库表"Category“,它可以有一个自我引用。如果self-reference为null,则它是顶级类别(没有父级)。如果它指向另一个类别,则它是给定类别的子类别。

现在,我正在尝试设置查询,它返回具有给定父类别id的所有子类别。类似于以下内容(Android Room语法):

代码语言:javascript
复制
"SELECT * FROM category WHERE parent_id = :parentId"

如果parentId ==为空,此查询将不返回任何内容,但我希望它返回parentId ==为空的所有类别(即顶级类别)。使用查询

代码语言:javascript
复制
"SELECT * FROM category WHERE parent_id IS NULL"

我可以成功地获取父类别,但显然,它不适用于子类别。

我还尝试了以下查询

代码语言:javascript
复制
"SELECT * FROM category WHERE (parent_id IS NULL OR parent_id = :parentId)

但是它当然失败了,因为它总是返回顶级类别,即使它的目的是只获得特定的子类别集。

我的问题是,如何设置查询以使其按预期工作,即当parentId ==为null时返回所有顶级类别,否则返回给定类别id的所有子类别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-04 04:24:04

SQL标准要求对空值进行这种处理。

但是SQLite有一个扩展:你也可以将IS与非空值一起使用:

代码语言:javascript
复制
SELECT * FROM category WHERE parent_id IS :parentId
票数 1
EN

Stack Overflow用户

发布于 2018-06-04 01:16:36

我认为你只需要一个稍微复杂一点的条件:

代码语言:javascript
复制
SELECT c.*
FROM category c
WHERE (c.parent_id IS NULL AND :parentId IS NULL) OR
      (parent_id = :parentId);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668907

复制
相关文章

相似问题

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