2017-08-01 205 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

感謝你,讓我在多個表中工作,這是我需要做的 –

相關問題