我有一个包含这样数据的表
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在哪里 tagid = 9它应该返回bookid 113421和113422,因为它存在于两本书中,但是如果我要求标签9和10的数据,它应该只返回书113421,因为这是唯一存在两个标签的书。
由于
Parminder
答案 0 :(得分: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等)
(注意:这是假设您没有重复TagId重复值的书籍)
答案 1 :(得分:0)
SELECT * FROM Books WHERE TagId IN(9,10)
答案 2 :(得分:0)
Select distinct BookId From Books Where TagId = 9
intersect
Select distinct BookId From Books Where TagId = 10
希望这有帮助