为什么在SQLite中不存在过滤时需要equals条件?
我有一份产品目录和这些产品的客户订单清单。 我想找到尚未收到订单的产品,并在SQLite中尝试了以下方法:为什么在SQLite中不存在过滤时需要equals条件?,sql,sqlite,Sql,Sqlite,我有一份产品目录和这些产品的客户订单清单。 我想找到尚未收到订单的产品,并在SQLite中尝试了以下方法: SELECT product_id FROM products p WHERE NOT EXISTS (SELECT product_id FROM orders ord) 然而,这只是生成产品p的整个列表,而不进行任何过滤。为什么下面的解决方案有效,而上面的解决方案无效 SELECT product_id FROM products p WHERE NOT
SELECT product_id
FROM products p
WHERE NOT EXISTS (SELECT product_id FROM orders ord)
然而,这只是生成产品p的整个列表,而不进行任何过滤。为什么下面的解决方案有效,而上面的解决方案无效
SELECT product_id
FROM products p
WHERE NOT EXISTS (SELECT product_id FROM orders ord
WHERE p.product_id = ord.product_id)
equals条件使子查询成为相关子查询。没有它,不存在就没有问题。它运行子查询,如果子查询返回任何行,那么所有内容都将被过滤掉 据推测,orders至少有一行,因此子查询将始终返回一行,而不包含EXISTS。因此,整个查询返回空集 使用correlated子句,独立检查每个产品标识。因此,查询将返回从未订购过的产品。从不存在的产品p中选择产品id从订单ord中选择产品id除非表orders为空,否则无法返回整个产品列表。