我要表:

Table A
id | title
1  | toto
2  | tata
3  | titi


Table B
id | title_id | tag_id
1  |    1     |   6
2  |    1     |   16
3  |    1     |   26
4  |    2     |   6
5  |    2     |   7
6  |    2     |   16
7  |    3     |   2
8  |    3     |   1
9  |    3     |   16


(对不起,表格显示不好)

在我的应用程序中,我有一个带有复选框的标签列表视图,当用户单击一个复选框时,我想用单击的复选框过滤标题:
(例如:如果用户单击标签16,则应该显示标题1、2和3。但是,如果用户单击ID为26的ID和ID为16的标签,结果我应该只有ID为1的标题)

我想到这样的查询:

SELECT DISTINCT A.title,A.id
从A
内接头B
ON B.title_id = A.id
其中B.tag_id = 26和B.tag_id = 16;

但是很显然,查询的最后一部分(同一列上的两个AND子句)是错误的,并且我没有找到可以提供此结果的查询。

我尝试了这个:

SELECT DISTINCT A.title,A.id
从A
内接头B
ON B.title_id = A.id
WHERE B.tag_id IN('26','16');

但是IN子句就像OR子句,结果,我得到了值26的所有行加上值16的所有行(标题1、2和3),而不是标题1。
我绝对需要和sql查询一起执行此操作,因为我正在使用SimpleCursorAdapter来检索数据并填充其他listview。

我搜索了一段时间,但没有找到任何相关的解决方案。 (或者我打错了字...)

你对我有解决办法吗?

PS:我希望我已经清楚了。对不起,我的英语不好。

最佳答案

使用子查询:

SELECT DISTINCT A.title, A.id FROM A WHERE
    A.id IN (SELECT DISTINCT B.title_id FROM B WHERE B.tag_id='16')
    AND A.id IN (SELECT DISTINCT B.title_id FROM B WHERE B.tag_id='26')

08-17 10:54
查看更多