3

我有一个带有 VBA 的 Excel 程序,它连接到 MySQL 数据库以检索一些信息。最初,当程序加载时,我有以下查询。

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 克里斯托弗·诺兰
  • ETC

表 2 有如下数据。

  • 1 acted_in 蝙蝠侠
  • 2导演蝙蝠侠
  • ETC

只要表 2 中的总行数较少,我上面给出的查询就可以很好地工作。但是,目前我的数据在表 1 中有 26000 行,在表 2 中有 102000 行。所以,当我在我的程序中运行上述查询时,它执行查询大约需要半个小时,有时它不能正确执行。我也尝试了以下查询,但也需要很长时间。

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 回答
0

与其他提供的答案类似,但是使用直接链接到表而不是 SELECT DISTINCT 上的内联视图,查询可能会更好地执行:

SELECT t1.*
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.subject
WHERE t2.subject IS NULL
于 2013-07-04T05:55:12.840 回答
0

询问:

SELECT a.*
FROM Table1 a
WHERE NOT EXISTS (SELECT subject
                  FROM Table2 b
                  WHERE a.id = b.subject)
于 2013-07-04T06:06:28.120 回答