【问题标题】:Subquery to show all other categories one to many relationships子查询以显示所有其他类别的一对多关系
【发布时间】:2011-06-19 16:37:25
【问题描述】:

我正在尝试创建一个查询,我可以在其中查看属于 1 类和 2 类的所有书籍(例如恐怖和小说),但也可以显示该书也属于的类别。我该怎么做?我只能假设我将需要一个递归子查询,但这可能效率低下。

SELECT book.bookid,
       book.author,
       book.title,
       Group_concat(DISTINCT category.categorydesc)
FROM   book,
       bookscategories,
       category
WHERE  book.bookid = bookscategories.bookid
       AND bookscategories.categoryid = category.categoryid
       AND category.categoryid = 1
       AND category.categoryid = 2
GROUP  BY book.bookid;

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    select b.bookid, b.author, b.title, group_concat(distinct c.categorydesc)
    from book as b
    inner join bookcategories as bc on b.bookid = bc.bookid
    inner join categories as c on bc.categoryid = c.categoryid
    where b.bookid in (select bc1.bookid
        from bookcategories as bc1
        inner join bookcategories as bc2 on bc1.bookid = bc2.bookid
        where bc1.categoryid = 1 and bc2.categoryid = 2)
    group by b.bookid;
    

    我不确定此查询的性能,因为它使用 bookcategories 表 3 次。

    选择 b.author 和 b.title 在技术上并不正确,但在这种情况下应该可以工作,因为 b.bookid 可能是唯一的。否则,无法选择既不属于 group by 子句也不用于聚合函数的内容。

    我相信您发布的代码将始终返回一个空结果集,因为您将 category.categoryid 限制为同时为 1 和 2。

    【讨论】:

    • 非常感谢!我很欣赏可能存在性能问题,但我很高兴它目前正在工作! :) 另外,我同意,我重新查看了原始查询,但由于“和”,它不起作用,我猜“或”会起作用,但没有给出我想要的结果。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多