2017-08-01 188 views
0

我不完全知道如何可能这是一条select语句,或者不同的,如果我更好的让所有的结果和Android Studio中做的检查自己。的SQLite得到第1列,其中第1列和第2列满足多种需求

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

的TagsLink表中有2列,一列存储的TagsID和一个存储RecordingsID

什么我希望做的是只返回满足所选标签标准RecordingsIDs。因此,如果选择标签ID 3,则会返回录音1,2和4。如果TagsID 3和4选择,它只返回录音2和4

在我看来它是沿着线的东西:

SELECT DISTINCT RecordingsID FROM TagsLink WHERE ... 

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

+0

你可以提供一个小提琴手? – Shuddh

+1

我想你可能会在这里得到你的答案https://www.techonthenet.com/sqlite/intersect.php – Shuddh

回答

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. 

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

其他相似和有帮助的答案hereherehere

编辑

以容纳更多的表,在不同的列过滤,用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. 
+0

非常感谢,你是一个传奇!感谢其他链接,我试着看,但我的结果没有带回太多! –

+0

@PaulStringer快乐!一定要接受它作为正确的答案,如果它适合你:) – Andy

+0

一直在绞尽脑汁,试图找出我如何做到这一点的多个表,不要以为你会知道我会怎么做?基本上,您可以将通讯录和标签链接到录音,所以我也有了TagsLink表和ContactsLink表。所以,如果我选择2个标签和1次的接触,我希望所有的录制ID的有两个标签,并针对他们的联系?我建议最好只串联的2个表来一个链接表与参考列? –

1

这应该工作: SELECT RecordingsID FROM tagslink WHERE TagsID = 4 Intersect SELECT RecordingsID FROM tagslink WHERE TagsID = 3 我无法用sqlite测试它。但是,要使用该功能相交,不使用SQLite不支持他们

+0

感谢你,让我在多个表中工作,这是我需要做的 –

相关问题