-3

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

4

3 回答 3

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一个外键。

于 2013-03-10T16:59:42.263 回答
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
)
于 2013-03-10T17:00:06.410 回答
1

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

SELECT  p.* 
FROM    (product p LEFT JOIN productProcess pp ON a.productID = b.productID)
WHERE   pp.productID IS NULL
于 2013-03-10T17:03:39.937 回答