2017-01-12 71 views
0

我需要一個小SQLite問題的幫助,在我的應用程序中,用戶可以添加一些待辦事項,並將此待辦事項與聯繫人連接,但聯繫人有多個待辦事項的多個連接。我的問題是,如果我想要一個特定待辦事項的所有聯繫人,必須查看我的查詢?多個表的SQLite查詢與參考ID表

託多斯

todoId todoTitle 
0  do some 
1  do some 

聯繫

contactId contactName 
299    Stan 
231    Jeff 

ReferenceIds

contactId todoId 
    299   0 
    299   1 
    231   0 
+0

請註明某些查詢的答案,如果它是有幫助的 –

+0

噢,對不起jeah它解決我的問題 – developKinberg

回答

1

假設你有這樣的許多一對多的關係,你可以得到一個所有聯繫人像這樣一個查詢中指定的待辦事項ID:

SELECT contactId, contactName 
FROM contacts 
JOIN referenceIds ON referenceIds.contactId = contacts.contactId 
WHERE todoId = ID 

注意上面的查詢沒有從todos表中選擇任何列。如果你也想從該表中的列,你需要第二個加入像這樣:

SELECT contactId, contactName, todoTitle 
FROM contacts 
JOIN referenceIds ON referenceIds.contactId = contacts.contactId 
JOIN todos ON todos.todoId = referenceIds.todoId 
WHERE todoId = ID 
+0

第二次連接對於已經從referenceIds表中加入的搜索是多餘的todoid –

+0

@PogonetsAnton這是真的,除非您還打算從此查詢中的todos表中選擇任何東西(我習慣從兩個表中選擇列時進行這些查詢)。我會更新我的答案以反映這一點。 – Karakuri

1

首先,如果你想要一個一對多的關係,你不需要關係表。這是多對多的必要條件。如果1個聯繫人有多個待辦事項,並且每個待辦事項都有一個聯繫人 - 只需將contactId添加到待辦事項桌。在這種情況下,你可以從Todos表通過使用ContactID

只需選擇

你的情況,你應該查詢連接

select distinct c.* 
from Contacts as c 
inner join ReferenceIds as r on c.contactId = r.contactId 
where todoId = ? 
+0

我的第一個solutiom是一個todoId列我的聯繫人表格,你認爲你的方式是一個很好的選擇,那麼聯繫人可以有多個待辦事項和待辦事項可以有多個聯繫人? – developKinberg

+0

「聯繫人表中的todoid」是許多聯繫人的一個待辦事項。你想要哪種關係? –

+0

在我的tododetailview中有一個待辦事項和許多聯繫人,然後我有一個與聯繫人的列表視圖,在這個Detailview很多待辦事項。一個聯繫人可以有多個待辦事項,例如。斯坦可以有待辦事項A,todoB和todoD,但是傑夫只有待辦事項B ...對不起我的英文不好。 – developKinberg