【问题标题】:sql server query/subquery questionsql server 查询/子查询问题
【发布时间】:2010-05-20 06:07:03
【问题描述】:

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

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,因为这是唯一同时存在两个标签的书。

谢谢

帕米德

【问题讨论】:

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


    【解决方案1】:

    以下应该有效:

    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 值的书籍)

    【讨论】:

      【解决方案2】:

      SELECT * FROM Books WHERE TagId IN (9,10)

      【讨论】:

      • 那无济于事。它也会给我第二组的行。
      • 那不符合他的要求。如果您传入 9 和 10,他只想要 TagId 为 9 10 的书籍。您的代码将返回 TagId 为 9 10 的所有书籍。跨度>
      【解决方案3】:
      Select distinct BookId From Books Where TagId = 9
      
      intersect
      
      Select distinct BookId From Books Where TagId = 10
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多