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