2010-05-20 196 views
2

我有這樣的SQL Server查詢/子查詢的問題

Id BookId TagId 
34 113421 9 
35 113421 10 
36 113421 11 
37 113421 1 
38 113422 9 
39 113422 1 
40 113422 12 

我需要編寫一個查詢(SQL Server)的數據表根據標籤這使我的數據說,如果我想bookIds其中 標籤識別= 9它應該返回bookid 113421和113422,因爲它存在於兩本書中,但是如果我要求標籤9和10的數據,它應該只返回book 113421,因爲這是兩個標籤都存在的唯一書籍。

感謝

成員Parminder

回答

2

下面應該工作:

SELECT 
    BookId 
FROM 
    BookTags 
WHERE 
    TagId IN (9,10) 
GROUP BY BookId HAVING COUNT(*) = 2 

您需要設置HAVING COUNT(*) = x位等x等於您正在搜索的標籤數量(所以在這種情況下,它是2.如果您需要9,10 & 11,你把它設置爲3等)

(注:這是假設你沒有重複的重複的標籤識別值的書)

+0

感謝codeka。它的工作原理是 。 – Parminder 2010-05-20 06:26:55

0

SELECT * FROM圖書WHERE標籤識別IN(9,10)

+0

這不會幫幫我。它也會給我第二組的行。 – Parminder 2010-05-20 06:18:13

+0

這不符合他的要求。如果您通過9和10,他只需要書籤的TagId爲9 *和* 10。您的代碼將返回所有TagId爲9 *或* 10的書籍。 – 2010-05-20 06:19:19

0
Select distinct BookId From Books Where TagId = 9 

intersect 

Select distinct BookId From Books Where TagId = 10 

希望這有助於