我有一个数据库表“类别”,它可以有一个自我参考。如果自引用为空,则它是顶级类别(无父类别)。如果它指向另一个类别,则它是给定类别的子类别。
现在我正在尝试设置查询,该查询返回具有给定父类别 ID 的所有子类别。类似于以下内容(Android Room 语法):
"SELECT * FROM category WHERE parent_id = :parentId"
如果 parentId == null,则此查询不返回任何内容,但我希望它返回 parentId == null 的所有类别(即顶级类别)。带查询
"SELECT * FROM category WHERE parent_id IS NULL"
我可以成功获得父类别,但显然,它不适用于子类别。
我也尝试了以下查询
"SELECT * FROM category WHERE (parent_id IS NULL OR parent_id = :parentId)
但它当然失败了,因为它总是返回顶级类别,即使目的是只获得某些子类别。
我的问题是,如何设置查询以使其按预期工作,即在 parentId == null 时返回所有顶级类别,否则返回给定类别 ID 的所有子类别。
SQL 标准要求对 NULL 值进行这种处理。
但 SQLite 有一个扩展:你也可以使用 IS 和非 NULL 值:
SELECT * FROM category WHERE parent_id IS :parentId
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句