我有一个数据库表"Category“,它可以有一个自我引用。如果self-reference为null,则它是顶级类别(没有父级)。如果它指向另一个类别,则它是给定类别的子类别。
现在,我正在尝试设置查询,它返回具有给定父类别id的所有子类别。类似于以下内容(Android Room语法):
"SELECT * FROM category WHERE parent_id = :parentId"
如果parentId ==为空,此查询将不返回任何内容,但我希望它返回parentId ==为空的所有类别(即顶级类别)。使用查询
"SELECT * FROM category WHERE parent_id IS NULL"
我可以成功地获取父类别,但显然,它不适用于子类别。
我还尝试了以下查询
"SELECT * FROM category WHERE (parent_id IS NULL OR parent_id = :parentId)
但是它当然失败了,因为它总是返回顶级类别,即使它的目的是只获得特定的子类别集。
我的问题是,如何设置查询以使其按预期工作,即当parentId ==为null时返回所有顶级类别,否则返回给定类别id的所有子类别。
发布于 2018-06-04 04:24:04
SQL标准要求对空值进行这种处理。
但是SQLite有一个扩展:你也可以将IS与非空值一起使用:
SELECT * FROM category WHERE parent_id IS :parentId
发布于 2018-06-04 01:16:36
我认为你只需要一个稍微复杂一点的条件:
SELECT c.*
FROM category c
WHERE (c.parent_id IS NULL AND :parentId IS NULL) OR
(parent_id = :parentId);
https://stackoverflow.com/questions/50668907
复制相似问题