2012-11-08 70 views
2

我想列出其在同一個表匹配的所有行。 到目前爲止,我想出了這個Mysql的WHERE IN子

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

但此查詢將繼續運行,但子查詢自己在0.1秒運行。

我怎麼能優化呢?

我認爲子查詢對每一行都執行,不僅一次。我對嗎?

回答

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列添加索引以加快執行速度。

+0

哇,那很快。謝謝! – Kristian