我有一个这样的产品表:
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用于说明所有可能的组合。
答案 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
已得到很好的优化(假设合适的索引)。