我有一个使用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具有如下数据。
表2具有如下数据。
只要表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
)
是否有一种有效的方法来重新定义查询?
答案 0 :(得分: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
答案 1 :(得分:0)
与其他提供的答案类似,但是通过直接链接到表而不是SELECT DISTINCT上的内联视图,查询可能表现更好:
SELECT t1.*
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.subject
WHERE t2.subject IS NULL
答案 2 :(得分:0)
查询:
SELECT a.*
FROM Table1 a
WHERE NOT EXISTS (SELECT subject
FROM Table2 b
WHERE a.id = b.subject)