找到两列之间的交集

时间:2011-06-03 20:01:46

标签: mysql sql

我正在尝试在MySQL的同一个表中找到两列之间的(集合)交集。我基本上想找到表中 col2 中的 col1 元素或表格中的 col2 元素的行的 COL1

最初我尝试过:

SELECT * FROM table WHERE col1 IN (SELECT col2 FROM table)

这在语法上是有效的,但运行时间太长了。表中的行数约为300,000,有问题的两列是未编入索引。我假设运行时间是n ^ 2或n ^ 3,这取决于MySQL是否为表的每个元素再次执行子查询,或者它是否临时存储子查询的结果。

接下来我想到了两列的并集并删除了不同的元素,因为如果一个元素在这个联合中出现多次,那么它必须存在于两列中(假设两列只包含不同的元素)。

是否有更优雅(即更快)的方法来查找同一个表的两列之间的集合交集?

2 个答案:

答案 0 :(得分:11)

SELECT t1.*
    FROM table t1
        INNER JOIN table t2
            ON t1.col1 = t2.col2

col1col2上创建索引对于帮助此查询也有很长的路要走。

答案 1 :(得分:-1)

如果您只想要值,请尝试INTERSECT命令:

(SELECT col1 FROM table) INTERSECT (SELECT col2 FROM table)