sqlite与第1列不同,第1列和第2列满足多个要求

时间:2017-08-01 12:49:22

标签: android sqlite android-sqlite

我不完全确定这在select语句中有多可能,或者我最好在Android Studio中获取所有结果并进行检查。

我有3个表,一个存储录音的表,一个存储标签的表和一个将标签链接到录音的表格 - TagsLink。

TagsLink表有2列,一列存储TagsID,另一列存储RecordingsID

我希望做的只是返回符合所选标签条件的RecordingsID。因此,如果选择了TagsID 3,则返回记录1,2和4。如果选择了TagsID 3和4,它只返回录音2和4。

在我看来,这就是:

SELECT DISTINCT RecordingsID FROM TagsLink WHERE ... 

如果这不是完全可能的话,任何关于实现这一目标的方法的建议(即使它需要重组数据库)都将不胜感激!

2 个答案:

答案 0 :(得分:2)

使用这种查询:

SELECT
RecordingsID
FROM
TagsLink
WHERE
TagsID IN (3, 4, ...)
GROUP BY
RecordingsID
HAVING COUNT(*) = 2 -- This number must match the number of tag IDs specified in the IN (...) list.

关键是要记住根据要过滤的标签调整计数。

其他类似且有用的答案herehere以及here

修改

要容纳其他表,过滤不同的列,请使用INTERSECT,如下所示:

SELECT
RecordingsID
FROM
TagsLink
WHERE
TagsID IN (3, 4, ...)
GROUP BY
RecordingsID
HAVING COUNT(*) = 2 -- This number must match the number of tag IDs specified in the IN (...) list.

INTERSECT

SELECT
RecordingsID
FROM
ContactsLink
WHERE
ContactsID IN (100, ...)
GROUP BY
RecordingsID
HAVING COUNT(*) = 1 -- This number must match the number of contacts IDs specified in the IN (...) list.

答案 1 :(得分:1)

这应该有效: SELECT RecordingsID FROM tagslink WHERE TagsID = 4 Intersect SELECT RecordingsID FROM tagslink WHERE TagsID = 3 我无法用sqlite测试它。但是,要使用的功能是Intersect,而不是使用sqlite不支持它们的括号