我從下面的模式建立了一個簡單的線程即時通訊系統:檢索基於它的許多一對多的關係,現有的記錄
一個線程可以包含兩個或多個用戶,而且用戶可以屬於很多線程。當用戶嘗試創建新線程時,我需要檢查用戶之間是否存在現有線程(由ID指定),並返回現有線程。如果我指定的用戶是該線程中的只有個用戶,我應該只返回現有的線程。
通常情況下,我會使用這樣的查詢:
select distinct t.* from threads t
inner join thread_users tu on tu.thread_id = t.id
where tu.user_id in (1, 2);
然而,這個查詢將返回線程,其中兩個用戶(ID 1
和2
)不在該線程只有用戶。我真正需要的是像only in (1, 2)
條款。
我該如何達到與where only in
條款相同的效果?
編輯:從一個相關的問題是出現在邊欄我張貼後,想出了這個:
select t.* from threads t
inner join thread_users tu on tu.thread_id = t.id
where tu.user_id in (1, 2)
having count(distinct tu.user_id) = 2;
這似乎工作,但我可能會丟失,我有不具優勢的情況下佔我的數據庫數據?
的可能重複[如何獲得一個ID與至少所有內容相關?](http://stackoverflow.com/questions/32137672/how-to-get-an-id-associated-with-at-least-all-contents) – Bulat