Android sqlite与第1列不同,第1列和第2列满足多种需求
我不完全确定这在select语句中有多可能,或者我是否最好在Android Studio中获取所有结果并进行检查 我有3个表,一个存储录音的表,一个存储标签的表和一个将标签链接到录音的表-TagsLink TagsLink表有两列,一列存储TagsID,另一列存储RecordingId 我希望只返回满足所选标记条件的RecordingSID。因此,如果选择TagsID 3,则返回录制1、2和4。如果选择了TagsID 3和4,则只返回录制2和录制4 在我看来,这大致是这样的:Android sqlite与第1列不同,第1列和第2列满足多种需求,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我不完全确定这在select语句中有多可能,或者我是否最好在Android Studio中获取所有结果并进行检查 我有3个表,一个存储录音的表,一个存储标签的表和一个将标签链接到录音的表-TagsLink TagsLink表有两列,一列存储TagsID,另一列存储RecordingId 我希望只返回满足所选标记条件的RecordingSID。因此,如果选择TagsID 3,则返回录制1、2和4。如果选择了TagsID 3和4,则只返回录制2和录制4 在我看来,这大致是这样的: SELECT DI
SELECT DISTINCT RecordingsID FROM TagsLink WHERE ...
如果这不是完全可能的,任何关于实现这一点的其他方法的建议(即使需要重组数据库)都将不胜感激 这应该有效:
从tagslink中选择RecordingsID,其中TagsID=4
横断
从tagslink中选择RecordingsID,其中TagsID=3
我无法用sqlite测试它。但是,要使用的函数是Intersect,而不是使用sqlite不支持的括号
从tagslink中选择RecordingsID,其中TagsID=4
横断
从tagslink中选择RecordingsID,其中TagsID=3
我无法用sqlite测试它。但是,要使用的函数是Intersect,而不是使用sqlite不支持的括号进行此类查询:
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.
对于此类查询:
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.
你能提供一个提琴手吗?我想你可能会在这里得到你的答案。你能提供一个提琴手吗?我想你可能会在这里得到你的答案。非常感谢你,你是一个传奇人物!!!谢谢你的其他链接,我试着寻找,但我的结果没有带来太多回来@保尔斯特林格:很高兴!如果它对你有用,一定要接受它作为正确答案:)我一直在绞尽脑汁,想知道我该如何处理多张桌子,难道你不知道我会怎么做吗?基本上,你可以将联系人和标签链接到录音,所以我也有了标签链接表和联系人链接表。所以,如果我选择了2个标签和1个联系人,我希望所有的录音Id都有标签和联系人?!我最好只是将两个表连接到一个带有引用列的链接表中?非常感谢,你是一个传奇人物!!!谢谢你的其他链接,我试着寻找,但我的结果没有带来太多回来@保尔斯特林格:很高兴!如果它对你有用,一定要接受它作为正确答案:)我一直在绞尽脑汁,想知道我该如何处理多张桌子,难道你不知道我会怎么做吗?基本上,你可以将联系人和标签链接到录音,所以我也有了标签链接表和联系人链接表。所以,如果我选择了2个标签和1个联系人,我希望所有的录音Id都有标签和联系人?!我最好只是将两个表连接到一个带有引用列的链接表中?感谢这一点,允许我跨多个表工作,这正是我需要做的。感谢这一点,允许我跨多个表工作,这正是我需要做的