如何在两个视图中显示名称?

时间:2013-03-08 00:01:31

标签: sql database

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

如果您需要帮助学习JOIN语法,这里有一个很棒的visual explanation

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

答案 1 :(得分:2)

使用JOIN

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

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

为了提高性能,请在两个表的列NAME上添加索引,因为您正在加入它。

要进一步了解联接,请访问以下链接: