2012-02-10 41 views
2

我目前正在研究一個MYSQL項目,它有一些相當標準的多對多關係。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本書。

回答

1

我不認爲有一個很順利辦法做到這一點,但如果表現不是一個大問題,你可以利用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條款甚至不需要正確的結果,但它使得查詢不那麼昂貴。)

+0

這是完美的一部分。謝謝。由於查詢運行不太多,我並不擔心性能問題。 – m4rv 2012-02-10 04:15:44

0

如果這是一個你可以做的: 雖然不是很重複。

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

感謝您的回覆,這是我開始的地方,但我無法讓它擴展到許多作者。 – m4rv 2012-02-10 04:13:50