sql server查询/子查询问题

时间:2010-05-20 06:07:04

标签: asp.net sql sql-server asp.net-mvc

我有一个包含这样数据的表

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

3 个答案:

答案 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

希望这有帮助