【问题标题】:Strange result in SQLite querySQLite 查询中的奇怪结果
【发布时间】:2013-06-14 00:18:55
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: sqlite android-sqlite sqliteopenhelper


    【解决方案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'
    

    【讨论】:

    • 谢谢!它工作正常。我不太习惯 JOIN 子句。
    • 哦好的我记得怎么写sql了。是的 join 一开始可能有点奇怪,特别是因为它有修饰符(我认为是内部、外部、左侧和右侧),但对于你想要的,直接连接可以发挥神奇的作用。
    猜你喜欢
    • 2018-09-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多