假設我有一個帶兩列的「標籤」表:tagid和contentid。每一行代表分配給一段內容的標籤。我想要一個查詢,這將使我的每一條內容被標記爲tagids 334,338的內容識別,和342SQL查詢:在幾行而不是子查詢中模擬「AND」
「易」的方式來做到這將是(僞):
select contentid from tags where tagid = 334 and contentid in (
select contentid from tags where tagid = 338 and contentid in (
select contentid from tags where tagid = 342
)
)
但是,我的直覺告訴我,有一個更好,更快,更可擴展的方法來做到這一點。例如,如果我需要找到12個標籤的交集?這很快就會變得可怕。有任何想法嗎?
編輯:原來這也包括在this excellent blog post。
就是這樣。雖然如果tagid,contentid是唯一的,那麼COUNT中可能不需要DISTINCT(DISTINCT tagID) – tzot 2008-10-02 18:44:04
非常聰明的解決方案,但它需要對我們安裝的SQL2000進行調整。如果沒有select子句中的聚合,我們不能使用「having」。很容易解決,雖然。 – 2008-10-02 18:49:48
這將工作在MySQL和Oracle? – 2008-10-02 19:00:50