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