Mysql查询效率

时间:2013-03-10 16:56:55

标签: php mysql sql join

我们有一个名为product的表,其中productID为主键。然后我们有一个名为productProcess的表,其中存储了productID和processID。所以现在我们要搜索productProcess表中没有实例的所有productID。目前我们首先运行两个查询所有产品,第二个是productProcess的productID,选择那些不存在的产品ID。还有其他机制吗?

3 个答案:

答案 0 :(得分:2)

是的,有。使用LEFT JOIN

SELECT  a.*      // this will get all columns from product table.
FROM    product a
        LEFT JOIN productProcess b
            ON a.productID = b.productID
WHERE   b.productID IS NULL

要进一步了解联接,请访问以下链接:

如果速度更快,另一个提示是将表productID设置为productProcess外键。

答案 1 :(得分:2)

假设product.productID 不能为NULL

SELECT product.productID 
FROM product
LEFT JOIN productProcess
ON productProcess.productID = product.productID
WHERE productProcess.productID IS NULL

另一个选项是WHERE NOT EXIST

SELECT product.productID
FROM product
WHERE NOT EXISTS (
  SELECT productID FROM productProcess
  WHERE productProcess.productID = product.productId
)

答案 2 :(得分:1)

您可以使用左连接。 如果您可以使用左连接,则结果将是与产品和ProductsProcess有关的所有产品。

SELECT  p.* 
FROM    (product p LEFT JOIN productProcess pp ON a.productID = b.productID)
WHERE   pp.productID IS NULL