首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL从关系表中选择唯一值

MySQL从关系表中选择唯一值
EN

Stack Overflow用户
提问于 2012-02-10 11:42:56
回答 2查看 626关注 0票数 2

我目前正在处理一个MYSQL项目,它有几个相当标准的多对多关系。

我已经展示了一个大大简化的关系表来帮助我的示例。

代码语言:javascript
运行
复制
table: book_authors
ID    BOOKS   AUTHORS
1     1       4
2     1       5
3     4       4
4     4       5
5     2       6
6     2       1
7     2       5
8     3       6
9     3       5
10    3       1
12    5       2
13    6       2
14    7       5

我希望实现的是能够选择所有有指定作者的书籍,并且只得到与所有提供的作者相匹配的书籍。每次请求的作者数量也是可变的。

因此,如果我要查找作者4和作者5所写的所有书籍,我只会得到书籍1和4的结果。如果我只找作者5写的书,我只会找到书7。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 11:53:05

我不认为有一种非常顺利的方法可以做到这一点,但如果性能不是一个大问题,您可以利用MySQL's GROUP_CONCAT function,并编写以下代码:

代码语言:javascript
运行
复制
SELECT books
  FROM book_authors
 WHERE books IN
        ( SELECT books
            FROM book_authors
           WHERE authors = 4
        )
 GROUP
    BY books
HAVING GROUP_CONCAT(authors ORDER BY authors) = '4,5'
;

(正确的结果甚至不需要WHERE子句,但它会降低查询的开销。)

票数 1
EN

Stack Overflow用户

发布于 2012-02-10 12:00:48

如果它是一次性的,你可以这样做:虽然不是很容易重复。

代码语言:javascript
运行
复制
select distinct
  ba1.books
from
  book_authors ba1
join
  book_authors ba2
    on ba1.id<>ba2.id and ba1.books=ba2.books
where
  ba1.authors=5
  and ba2.authors=4

编辑:忘记了连接的一部分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9222392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档