私はテーブルを持っBook
ています。多くの s があります (この例のためだけに多対多にする必要があることはわかっています)。Author
Book
Author
著者 XとYによって書かれたすべての本を1 つの SQL クエリで選択するにはどうすればよいですか?
編集
著者の数は可変です - 3 人、5 人、またはそれ以上の著者。
私は今それを理解することはできません (私はJOIN
s とサブクエリを実行しようとしました)。
SELECT * FROM book ...
?
私はテーブルを持っBook
ています。多くの s があります (この例のためだけに多対多にする必要があることはわかっています)。Author
Book
Author
著者 XとYによって書かれたすべての本を1 つの SQL クエリで選択するにはどうすればよいですか?
編集
著者の数は可変です - 3 人、5 人、またはそれ以上の著者。
私は今それを理解することはできません (私はJOIN
s とサブクエリを実行しようとしました)。
SELECT * FROM book ...
?
これを試して:
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
著者テーブルを二重に結合することができます。
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 が含まれる本を引き出します。
select * from book where author=.... ?
あなたの構造を理解するのは難しいと思いましたが、これが最善の方法だと思いますか?
お役に立てれば