Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在SQLite中不存在过滤时需要equals条件?_Sql_Sqlite - Fatal编程技术网

为什么在SQLite中不存在过滤时需要equals条件?

为什么在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

我有一份产品目录和这些产品的客户订单清单。 我想找到尚未收到订单的产品,并在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 EXISTS    (SELECT product_id FROM orders ord
                       WHERE p.product_id = ord.product_id)

equals条件使子查询成为相关子查询。没有它,不存在就没有问题。它运行子查询,如果子查询返回任何行,那么所有内容都将被过滤掉

据推测,orders至少有一行,因此子查询将始终返回一行,而不包含EXISTS。因此,整个查询返回空集

使用correlated子句,独立检查每个产品标识。因此,查询将返回从未订购过的产品。

从不存在的产品p中选择产品id从订单ord中选择产品id除非表orders为空,否则无法返回整个产品列表。