我不完全确定这在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 ...
如果这不是完全可能的话,任何关于实现这一目标的方法的建议(即使它需要重组数据库)都将不胜感激!
答案 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.
关键是要记住根据要过滤的标签调整计数。
修改强>
要容纳其他表,过滤不同的列,请使用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不支持它们的括号