比如说,我有以下两个表:
TableA { _id }
TableB { _id, TableA_id, OptionString }
TableA中的每一行都有一个引用它的TableB中的一行(使用TableA_id外键)。
我的查询列出了TableA中要显示给用户的行。
OptionString可以是两个值中的一个 - 让我们说“Option1”和“Option2”。
现在我希望查询仍然列出TableA中的行,但是我希望为用户提供一个过滤器来说“只显示TableA中的行,其中OptionString具有”Option1“或”Option2“(即独占或)。
我尝试过使用COUNT,但问题是零数不显示结果(不是我想要的'0'。
我确信我必须错过一些简单的东西。
非常感谢任何帮助。
干杯, 丹。
答案 0 :(得分:3)
如果我理解你的问题,试试这个
select a._id
from tableA a
join tableB b on a._id=b.tableA_id
where b.optionString in ('Option1','Option2')
group by a._id
having count(*)=1
基于新信息修改查询
select a._id
from tableA a
join (select distinct _id,tablea_id,optionString from TableB) b
on a._id=b.tableA_id
where b.optionString in ('Option1','Option2')
group by a._id
having count(*)=1
我在这里做的是强制使用tableB
中的不同值答案 1 :(得分:1)
一种天真的方法(或许可以改进......)
SELECT *
FROM TableA
WHERE _id IN
(SELECT TableA_id
FROM TableB
WHERE OptionString IN ('Option1', 'Option2')
)
AND _id NOT IN
(SELECT T1.TableA_id
FROM TableB T1
JOIN TableB T2 ON T1.TableA_id = T2.TableA_id
WHERE T1.optionString = 'Option1'
AND T2.optionString = 'Option2'
)
这个想法只是选择找到Option1或Option2的合格记录,并排除找到Option1和Option2的记录。
如果我们知道对于TableA的给定项目只能找到一个给定的Optionx值,则可以应用按查询分组(请参阅Sparky的答案)。