2012-08-17 74 views
1

如下表(描述許多一對多的關係):mysql查詢多關係表 - 'relational divison'?

 
ID | PageID | TagID 
-------------------- 
1 | 1  | 1 
2 | 1  | 2 
3 | 2  | 2 
4 | 2  | 3 

如何選擇「讓所有PageIDs 所有 TagIDs名單」?
換句話說:我想標記TagIDs 1和2(所以纔在這個例子中PAGEID 1)

畢竟網頁一些谷歌上搜索,我發現術語「關係部門」,這可能是與此有關,但我沒有不太明白。任何人有一個簡單的查詢我的問題?

回答

1

如果你在一個表tagids的列表中,那麼它是一個簡單連接和group by:

select pageId 
from t join 
    list l 
    on t.tagId = l.tagId cross join 
    (select count(*) cnt from list l) as const 
group by pageId 
having count(*) = max(cnt) 

having子句會檢查所有標籤都存在。如果可能有重複,那麼在這兩種情況下,您都希望將「count(*)」替換爲「count(distinct tagid)」。

+0

正確;只是想提及我現在使用一個稍微簡單的查詢,如下所述:http://stackoverflow.com/a/3001855/176140 – schellmax 2012-08-20 10:23:11