以下の例では、著者とその論文を含む書誌テーブルがあります。たとえば、著者 '001' と '003' は一緒に記事 '678' を書きました。
articleId | authorId
123 | 001
123 | 002
345 | 002
345 | 003
345 | 004
678 | 001
678 | 003
共通の著者に基づいて、著者間の共起を選択する必要があります。たとえば、上の表の場合、次の表を作成する必要があります。
AuthorA | AuthorB
001 | 002
002 | 003
002 | 004
003 | 004
001 | 003
最初のテーブルは非常に大きい (約 1.800.000 行)。最初に MS SQL Server 2008 を試したとき、2 番目のテーブルの構築は高速でしたが、今は MySQL にこだわっています。次のクエリを使用します。
SELECT foo.authorId AS authorA, bar.authorId AS authorB
FROM
(SELECT * FROM tblAuthorHasBib) AS foo,
(SELECT * FROM tblAuthorHasBib) AS bar
WHERE
foo.articleId = bar.articleId
AND
foo.authorId <> bar.authorId
GROUP BY foo.authorId, bar.authorId
MS SQL と同じくらい高速になるようにクエリを書き直すにはどうすればよいですか? ご指摘ありがとうございます。