在 SQLite 中,我想编写一个 SELECT 查询来查找具有某些属性+值或不具有某些属性的文章,其中属性位于另一个表中。
这就是我组织数据库的方式:
Articles:
ID Name
1 Paper clip
2 Water hose
3 Rubber duck
Features
ID Articles_ID Name Value
1 1 Color White
2 2 Color Yellow
3 2 Length 1.4m
4 3 Color Yellow
如果我想找到黄色的文章,我可以这样做:
SELECT distinct a.Name from Articles a join Features f
where a.ID = f.Articles_ID
and f.Name = "Color"
and f.Value = "Yellow";
但是,如果我想查找颜色为黄色但没有任何长度特征的文章怎么办。即我想要橡皮鸭,因为它没有长度,但我不想要水管。
在我的 UI 中可以选择:
Color: [ ] <empty>
[x] Yellow
[ ] White
[ ] ...
Length: [x] <empty>
[ ] 0.7m
[ ] 1.4m
[ ] ...
我的文章表有 ~20k 行和 ~200k 特征。
也许我的数据库不适合这种查询?如有必要,我可以轻松地重新生成它。