假设我有四个表:PAGE
、USER
、TAG
和PAGE-TAG
:
Table | Fields
------------------------------------------
PAGE | ID, CONTENT
TAG | ID, NAME
USER | ID, NAME
PAGE-TAG | ID, PAGE-ID, TAG-ID, USER-ID
假设我有四页:
PAGE#1 'Content page 1' tagged with tag#1 by user1, tagged with tag#1 by user2
PAGE#2 'Content page 2' tagged with tag#3 by user2, tagged by tag#1 by user2, tagged by tag#8 by user1
PAGE#3 'Content page 3' tagged with tag#7 by user#1
PAGE#4 'Content page 4' tagged with tag#1 by user1, tagged with tag#8 by user1
我希望我的查询看起来像这样:
select page.content ?
from page, page-tag
where
page.id = page-tag.pag-id
and page-tag.tag-id in (1, 3, 8)
order by ? desc
我想得到这样的输出:
Content page 2, 3
Content page 4, 2
Content page 1, 1
引用尼尔
你的问题有点令人困惑。您想获取每个页面被标记的次数吗?
不
每个页面获得每个标签的次数?
不
标记页面的唯一用户数?
不
使用每个标签标记每个页面的唯一用户数?
不
我想知道有多少传递的标签出现在特定页面中,而不仅仅是出现任何标签。
SQL IN 的工作方式类似于布尔运算符 OR。如果一个页面在 IN 子句中被标记了任何值,那么它返回 true。我想知道 IN 子句中有多少值返回 true。
下面我展示了我期望的输出:
page 1 | in (1,2) -> 1
page 1 | in (1,2,3) -> 1
page 1 | in (1) -> 1
page 1 | in (1,3,8) -> 1
page 2 | in (1,2) -> 1
page 2 | in (1,2,3) -> 2
page 2 | in (1) -> 1
page 2 | in (1,3,8) -> 3
page 4 | in (1,2,3) -> 1
page 4 | in (1,2,3) -> 1
page 4 | in (1) -> 1
page 4 | in (1,3,8) -> 2
这将是我之前提到的 page-tag 表的内容:
id page-id tag-id user-id
1 1 1 1
2 1 1 2
3 2 3 2
4 2 1 2
5 2 8 1
6 3 7 1
7 4 1 1
8 4 8 1
@Kristof并不完全是我正在寻找的东西,但无论如何谢谢。
@Daren如果我执行你的代码,我会得到下一个错误:
#1054 - Unknown column 'page-tag.tag-id' in 'having clause'
@Eduardo Molteni您的回答没有给出问题中的输出,但是:
Content page 2 8
Content page 4 8
content page 2 3
content page 1 1
content page 1 1
content page 2 1
cotnent page 4 1
@Keith我使用的是纯SQL而不是T-SQL,而且我不熟悉T-SQL,所以我不知道您的查询如何转换为纯SQL。
还有什么想法吗?