私はデータベースを持っています
books (primary key: bookID)
characterNames (foreign key: books.bookID)
locations (foreign key: books.bookID)
文字名と場所のテキスト内位置は、対応するテーブルに保存されます。
ここで、psycopg2 を使用して Python スクリプトを作成し、特定のキャラクター名と書籍内の特定の場所のすべての出現箇所を見つけたいと考えています。
現在、4 つのクエリを実行しています。
SELECT bookID, position FROM characterNames WHERE name='XXX';
--> result is saved in list 'charnames'
SELECT DISTINCT bookID FROM characterNames WHERE name='XXX';
--> result is saved in list 'charnamesIDs'
SELECT bookID, position FROM locations WHERE locName='YYY';
--> result is saved in list 'locs'
SELECT bookID FROM locations WHERE locName='YYY';
--> result is saved in list 'locsIDs'
どちらのクエリでも、名前または場所のみが表示される bookID を取得できます。したがって、私の目標は、「locs」で発生しない bookID を持つ「charnames」のすべての要素とその逆を排除することです。私のアプローチは次のとおりです。
for cnameTuple in charnames:
~if cnameTuple[0] in locsIDs:
~~continue
~del(cname)
locs のタプルに対応するループを作成しました。
残念ながら、このアルゴリズムには多くの時間が必要です。このタスクをより速く実行する方法はありますか?