我目前正在处理一个MYSQL项目,它有几个相当标准的多对多关系。
我已经展示了一个大大简化的关系表来帮助我的示例。
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。
发布于 2012-02-10 11:53:05
我不认为有一种非常顺利的方法可以做到这一点,但如果性能不是一个大问题,您可以利用MySQL's GROUP_CONCAT function,并编写以下代码:
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子句,但它会降低查询的开销。)
发布于 2012-02-10 12:00:48
如果它是一次性的,你可以这样做:虽然不是很容易重复。
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编辑:忘记了连接的一部分
https://stackoverflow.com/questions/9222392
复制相似问题