1

この問題のクエリを作成しようとしています:

すべての著者がインド国籍に属する本のみを選択するクエリを作成します。

ここで

内部結合を使用して 2 つのクエリを結合しようとしていますが、エラーが発生しています..

私のクエリは..

SELECT COUNT(*) 
FROM (books_authors 
WHERE books_authors.author_id IN 
        (
           SELECT author_id 
           FROM obl_authors WHERE nationality='Indian' 
        )  GROUP BY books_authors.book_id) A

INNER JOIN 
(
    SELECT COUNT(*) 
    FROM books_authors 
    GROUP BY books_authors.book_id 
) B
ON A=B 

このエラーが発生します:

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL    server version for the right syntax to use near 'where books_authors.author_id in (select author_id from obl_authors where nation' at line 1

私は3つのテーブルobl_books、obl_authors、books_authors(リンクテーブル)を持っています..ここでやろうとしていることは、最初のクエリで、各book_idのobl_authorテーブルから国籍がインドのauthor_idの行数を取得しています

2 番目のクエリでは、特定の book_id のすべての著者の行数を取得しています。

そして、これら2つのクエリを組み合わせて、book_idのauthor_idの行数がその合計行数(2番目のクエリから取得している)と等しいことを確認したい..その後、そのbook_idを取得します.

ON 句で A=B を実行してその等価性をチェックしましたが、一致する場合 (つまり A=B) にそれらの book_id を取得するように指示するにはどうすればよいですか?

4

2 に答える 2

0

これらを次のような列に結合する必要があります。

SELECT A.*, B.*
FROM    
    (SELECT COUNT(*), books_authors.book_id FROM (books_authors WHERE books_authors.author_id IN (SELECT author_id FROM obl_authors WHERE nationality='Indian' ) GROUP BY books_authors.book_id) A

    INNER JOIN 

    (SELECT COUNT(*), books_authors.book_id FROM books_authors GROUP BY books_authors.book_id ) B

    ON A.book_id = B.book_id

カウントが等しいかどうかを確認するために、実際にはテーブルを結合する必要はありません。単純な数値しかないため、次のようにします。

SELECT
    (SELECT COUNT(*), books_authors.book_id FROM (books_authors WHERE books_authors.author_id IN (SELECT author_id FROM obl_authors WHERE nationality='Indian' ))
    -
    (SELECT COUNT(*), books_authors.book_id FROM books_authors)
于 2013-07-24T06:27:26.020 に答える