SQL Server查询/子查询的问题

问题描述:

我有这样的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

下面应该工作:

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

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

Select distinct BookId From Books Where TagId = 9 

intersect 

Select distinct BookId From Books Where TagId = 10 

希望这有助于