-2

私は出版データベースを扱っており、書籍の記録を保持しています。本には複数の著者がいる場合があります。書籍の著者の記録を保持するテーブルを維持しています。著者を選択し、それぞれの本で一緒に仕事をした他の著者も選択するには、SQL クエリが必要です。

Authorship テーブルは次のようになります。

+---------+--------+
| Author  | BookID |
+---------+--------+
|    1    |    1   |
|    2    |    1   |
|    1    |    2   |
|    2    |    2   |
|    3    |    2   |
|    4    |    2   |
|    5    |    3   |
|    5    |    4   |
+---------+--------+

したがって、著者 1 を選択した場合は、彼らが一緒に仕事をした著者を見たいと思います。結果は、著者 2、3、および 4 を返します。

ここでのアイデアは、著者が出版のキャリアで誰と協力したかを示すレポートを作成できるということです。

4

3 に答える 3

2
select a1.Author
from Authorship a
join Authorship a1 on a.BookID=a1.BookID
where a.Author=1

If you want to exclude the current author:

select a1.Author
from Authorship a
join Authorship a1 on a.BookID=a1.BookID
where a.Author=1 and a1.Author!=1
于 2013-03-05T08:05:40.190 に答える
2

これを試して:

SELECT author
FROM AuthorsBooks 
WHERE bookid IN(SELECT bookid
                FROM AuthorsBooks
                WHERE author = 1);

SQL フィドルのデモ

これにより、次のことが得られます。

| AUTHOR |
----------
|      1 |
|      2 |
|      3 |
|      4 |

または:を使用JOIN:

SELECT DISTINCT b1.author
FROM AuthorsBooks AS b1
INNER JOIN AuthorsBooks AS b2  ON b1.bookid = b2.bookid
WHERE b2.author = 1;

SQL フィドルのデモ

于 2013-03-05T08:06:13.023 に答える
1

これがあなたができることです。

SELECT DISTINCT Author  
FROM Authorship 
WHERE BookID IN(  
            SELECT BookID   
            FROM Authorship  
            WHERE Author = 1  
           ) 
AND Author <> 1

SQL フィドルのデモ

于 2013-03-05T08:24:03.817 に答える