从两个mysql表

时间:2015-09-20 15:01:51

标签: mysql performance

我有一个这样的产品表:

productid    categoryid

和另一个这样的类别表:

categoryid   parentid

希望在产品表中找到缺少的行

select distinct c.parentid, pc.productid, from products_categories pc
join categories c on pc.categoryid = c.categoryid
where  concat(pc.productid,'-',c.parentid) not in (
 select distinct concat(productid,'-',categoryid) from products_categories
)
然而,这非常缓慢。有没有办法用连接而不是在连接线中执行此操作? concat用于说明所有可能的组合。

1 个答案:

答案 0 :(得分:0)

要查找tbl_x但不在tbl_y中的内容,请执行此操作

SELECT ...
    FROM      tbl_x
    LEFT JOIN tbl_y  USING(...)
    WHERE tbl_y.id IS NULL;

构造IN ( SELECT ... )的优化程度非常低。 LEFT JOIN已得到很好的优化(假设合适的索引)。