0

我有一个非常大的视图,其中包含 500 万条包含重复名称的记录,每一行都有唯一的事务编号。还存在包含唯一名称的 9000 条记录的另一个视图。现在我想在第一个视图中检索其名称出现在第二个视图中的记录

select * from v1 where name in (select name from v2)

但是查询需要很长时间才能运行。有没有捷径的方法?

4

2 回答 2

2

您是否尝试仅使用INNER JOIN. 这将返回两个表中存在的所有行:

select v1.* 
from v1 
INNER JOIN v2
 on v1.name = v2.name 

如果您需要帮助学习JOIN语法,这里有一个很棒的可视化解释

您可以添加DISTINCT将删除查询返回的任何重复值的关键字。

于 2013-03-08T00:03:33.123 回答
2

使用JOIN.

DISTINCT将允许您仅返回列表中的唯一记录,因为您是从另一个表加入的,并且一条记录可能在另一个表上有多个匹配项。

SELECT  DISTINCT a.*
FROM    v1 a
        INNER JOIN v2 b
            ON a.name = b.name

为了获得更快的性能,请在两个表的列NAME上添加索引,因为您是通过它加入的。

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-03-08T00:03:50.813 回答