Mysql WHERE IN子查询

时间:2012-11-08 08:40:19

标签: mysql group-by subquery

我想在同一张桌子上列出所有匹配的行。 到目前为止,我已经提出了这个

SELECT *
FROM parim_firms
WHERE firm_name IN (
    SELECT firm_name
    FROM parim_firms
    GROUP BY firm_name
    HAVING COUNT(*) > 1
)

但是这个查询一直在运行,尽管子查询本身在0.1秒内运行。

我怎样才能优化这个?

我认为子查询对每一行执行,而不仅仅执行一次。我是对的吗?

1 个答案:

答案 0 :(得分:4)

加入它怎么样?

SELECT  a.*
FROM    parim_firms a
        INNER JOIN
        (
            SELECT firm_name
            FROM parim_firms
            GROUP BY firm_name
            HAVING COUNT(*) > 1
        ) b ON a.firm_name = b.firm_name

PS:请务必在列firm_name上添加索引,以便更快地执行。

相关问题