1

次の表が与えられます (多対多の関係を説明しています):

ID | ページ ID | タグ ID
--------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 2 | 3

「すべての TagID のリストを持つすべてのPageID」を選択するにはどうすればよいですか?
つまり、TagID 1 と 2 でタグ付けされたすべてのページが必要です (したがって、この例では PageID 1 のみです)。

グーグルで調べた後、ここに関連する可能性のある「関係分割」という用語を見つけましたが、よくわかりませんでした。私の問題について簡単なクエリを持っている人はいますか?

4

1 に答える 1

1

テーブルにタグ ID のリストがある場合、それは単純な結合とグループ化です。

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)」に置き換えます。

于 2012-08-17T17:11:16.737 に答える