比方說,我有四個表:PAGE
,USER
,TAG
和PAGE-TAG
:如何獲取SQL IN子句中出現的次數?
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
報價Neall
Your question is a bit confusing. Do you want to get the number of times each page has been tagged?
沒有
The number of times each page has gotten each tag?
沒有
The number of unique users that have tagged a page?
沒有
The number of unique users that have tagged each page with each tag?
沒有
我想知道有多少傳遞的標籤出現在某個特定頁面,而不僅僅是如果任何標籤的出現。
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
這將是我提到的網頁標籤表的內容之前:
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。
還有什麼想法?