我要表:
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')