📅  最后修改于: 2023-12-03 15:36:13.655000             🧑  作者: Mango
当使用 IN
子查询时, 如果需要从结果集中删除某些特定结果, 可以使用 NOT IN
, 但是一些时候更加实用的方法是使用 LEFT OUTER JOIN
与 NULL
。
使用 NOT IN
可以从结果集中删除特定的值。
SELECT [列名] FROM [表名] WHERE [列名] NOT IN ([值1],[值2],[值3],...)
SELECT *
FROM customers
WHERE customer_id NOT IN (SELECT customer_id FROM orders)
当使用 LEFT OUTER JOIN
时, 如果不存在连接的行,则结果集中的值将为 NULL
。 这种方法比使用 NOT IN
更加简单和直观。
SELECT [列名]
FROM [表名]
LEFT OUTER JOIN [连接表名] ON [表名].[列名] = [连接表名].[列名]
WHERE [连接表名].[列名] IS NULL;
SELECT *
FROM customers
LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.customer_id IS NULL;
这将返回所有不存在订单的客户信息。
无论使用 NOT IN
还是 LEFT OUTER JOIN
与 NULL
。都可以从 IN
子查询中删除特定的值。但是特定的情况下,应该选择使用哪一种方法要根据实际情况而定。