0

我从 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}

我究竟做错了什么?

4

1 回答 1

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'
于 2013-06-13T16:18:55.153 回答