0

3 つのテーブル obl_books、obl_authors、およびリンク テーブル books_authors があります。問題は、すべての著者がインド国籍に属する本のみを選択するクエリを作成することです。

そして、私がこれのために書いたクエリは

SELECT obl_books.*, books_authors.author_id
   FROM books_authors,obl_authors,obl_books
   WHERE   books_authors.author_id = obl_authors.author_id
   AND books_authors.book_id=obl_books.book_id
    GROUP BY books_authors.book_id
    HAVING  books_authors.author_id IN (SELECT obl_authors.author_id FROM obl_authors WHERE nationality='Indian')

国籍は obl_authors テーブルの列であり、本には多くの著者が含まれる場合があります。

したがって、book_id (2) に author_id (1)、author_id (2) があり、author_id (1) と (2) がインド人である場合、それを返す必要があり、著者の 1 人でもインド人でない場合は返されません。

しかし、私のクエリはその book_id も返します。

INの代わりにALLキーワードを使用してhaving句を変更しましたが、行が返されません。

4

5 に答える 5

1

試す:

SELECT obl_books.*, GROUP_CONCAT(books_authors.author_id)
FROM books_authors
JOIN obl_authors ON books_authors.author_id = obl_authors.author_id
JOIN obl_books ON books_authors.book_id=obl_books.book_id
GROUP BY books_authors.book_id
HAVING MIN(obl_authors.nationality)='Indian' AND 
       MAX(obl_authors.nationality)='Indian' 
于 2013-07-23T11:24:17.293 に答える
0

次の 1 つのクエリを試してください。

SELECT obl_books.*, books_authors.author_id
   FROM books_authors,obl_authors,obl_books
   WHERE   books_authors.author_id = obl_authors.author_id
   AND books_authors.book_id=obl_books.book_id and obl_authors.nationality='Indian'
   GROUP BY books_authors.book_id
   HAVING count(books_authors.book_id) = (SELECT count(*) FROM books_authors group by books_authors.author_id)
于 2013-07-23T11:19:58.340 に答える
0

これを試して

select * from obl_books where id in (select book_id from books_authors where author_id in (select id from obl_authors where nationality='Indian'))
于 2013-07-23T11:25:44.790 に答える
0

これを行うことができると思います..逆の方法でも..最初にインド人ではないすべての著者IDを取得し、次にそれらの著者を除いて、残りのすべての著者の本(インドの著者の本)を選択します。

 SELECT obl_books.*, books_authors.author_id
   FROM books_authors,obl_authors,obl_books
   WHERE   books_authors.author_id = obl_authors.author_id
   AND books_authors.book_id=obl_books.book_id AND  books_authors.author_id NOT IN (SELECT obl_authors.author_id FROM obl_authors WHERE nationality<>'Indian')
于 2013-07-23T11:21:25.217 に答える