我从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}
我做错了什么?
答案 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'