0

私はテーブルを持っBookています。多くの s があります (この例のためだけに多対多にする必要があることはわかっています)。AuthorBookAuthor

著者 XとYによって書かれたすべての本を1 つの SQL クエリで選択するにはどうすればよいですか?

編集

著者の数は可変です - 3 人、5 人、またはそれ以上の著者。

私は今それを理解することはできません (私はJOINs とサブクエリを実行しようとしました)。

SELECT * FROM book ...?

4

4 に答える 4

4

これを試して:

SELECT
  B.Name
FROM Books B
  JOIN Authors A
    ON B.AuthorID = A.ID
WHERE A.Name IN ('X', 'Y')
GROUP BY B.Name
HAVING COUNT(DISTINCT A.ID) = 2
于 2013-10-19T20:32:00.023 に答える
1

著者テーブルを二重に結合することができます。

SELECT Book.* from Book 
    JOIN Author author1 
        ON author1.book_id = Book.id AND author1.author_name = 'Some Name'
    JOIN Author author2
        ON author2.book_id = Book.id AND author1.author_name = 'Some Other Name'
GROUP BY Book.id

JOIN は、Both author を持つ書籍のみが返されることを保証し、GROUP BY は結果セットに一意のエントリのみが含まれるようにします。

このクエリでは、少なくとも2 人の著者が指定されている本が返されることに注意してください。たとえば、Smith、Jones、Martin の本ではなく、Smith と Jones の本のみが必要な場合、このクエリではそれができません。このクエリは、少なくともSmith と Jones が含まれる本を引き出します。

于 2013-10-19T20:32:13.617 に答える
0

select * from book where author=.... ?

あなたの構造を理解するのは難しいと思いましたが、これが最善の方法だと思いますか?

お役に立てれば

于 2013-10-19T20:28:56.380 に答える