用于在同一列上使用WHERE子句过滤数据的SQL查询

时间:2011-07-28 16:41:09

标签: android sqlite

我需要表格:

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 16,那么我应该只有标题为id 1)

我想到了一个类似的查询:

SELECT DISTINCT A.title,A.id 从A INNER JOIN B ON B.title_id = A.id WHERE B.tag_id = 26 AND B.tag_id = 16;

但显然查询的最后一部分(同一列上的两个AND子句)是错误的,我找不到会给我这个结果的查询。

我试过了:

SELECT DISTINCT A.title,A.id 从A INNER JOIN B ON B.title_id = A.id 在哪里B.tag_id IN('26','16');

但是IN子句就像一个OR子句,结果,我得到值26的所有行加上值16的所有行(标题1,2和3)而不是标题1。 我绝对需要用和SQL查询来做这个,因为我正在使用SimpleCursorAdapter来检索数据并填充其他列表视图。

我搜索了一会儿,但我没有找到任何相关的解决方案。 (或者我输入错误的单词......)

请问有解决方案吗?

PS:我希望我已经清楚了。抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

使用子查询:

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')