3

MySQLデータベースに接続して情報を取得するVBAプログラムを備えたExcelがあります。最初に、プログラムが読み込まれると、次のクエリが表示されます。

SELECT A.id,A.first_name,A.last_name FROM Table1 A WHERE A.ID NOT IN(SELECT DISTINCT  
SUBJECT FROM Table2)

表 1 には、次のようなデータがあります。

  • 1 クリスチャン・ベール
  • 2 クリストファー・ノーラン

表 2 には、次のようなデータがあります。

  • 1 act_in バットマン
  • 2 監督のバットマン

上記のクエリは、テーブル 2 の合計行数が少ない限り問題なく機能します。ただし、現在、データにはテーブル 1 に 26000 行、テーブル 2 に 102000 行あります。したがって、プログラムで上記のクエリを実行すると、クエリの実行に約 30 分かかり、場合によっては正しく実行されません。以下のクエリも試しましたが、時間がかかります。

SELECT  A.id, A.first_name, A.last_name FROM Table1 a 
WHERE   NOT EXISTS
(
    SELECT  1
    FROM    Table2 al
    WHERE   a.id = al.subject
)

クエリを言い換える効率的な方法はありますか?

4

3 に答える 3

4

外部結合を使用する

SELECT A.*
FROM Table1 a
LEFT OUTER JOIN (SELECT DISTINCT subject
            FROM Table2) b ON a.id = b.subject
WHERE b.subject IS NULL
于 2013-07-04T05:43:11.230 に答える