SQLite查询中的奇怪结果

时间:2013-06-13 16:14:06

标签: sqlite android-sqlite sqliteopenhelper

我从SQLite查询得到一个奇怪的结果。查询是下一个:

SELECT rule FROM rules
WHERE idRule = (SELECT idRuleForeign FROM rulesXfilter
                 WHERE idFilterForeign = (SELECT idFilter FROM filters
                                          WHERE name = 'Filter1'));

现在,假设我有下面几行的表格。

      filters                rules              rulesXfilter
idFilter   name       idRule     rule      idRuleForeign  idFilterForeign
   1      Filter1       1         Rule1          1              1
   2      Filter2       2         Rule2          2              1
                        3         Rule3          3              1
                                                 2              2

我得到的是{Rule1},虽然我认为我应该得到{Rule1,Rule2,Rule3}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

Select idRuleForeign...会返回多个结果,是({1, 2, 3})。但是,然后你说“给我一个idRule = {SET}的规则”,而sql不喜欢这个。我相信正在发生的事情是它取而代之的是第一个结果并给你那个。

解决方案是使用连接。内部选择这样,在大多数时间工作,可以真正减慢你的查询。如果我的语法正确,以下应该做你需要的:

SELECT r.rule FROM rules r
    JOIN rulesXfilter rf ON r.idRule = rf.idRuleForeign
    JOIN filters f ON f.idFilter = rf.idFilterForeign
WHERE f.name = 'Filter1'