首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NOT IN子句和NULL值

在 SQL 查询中,NOT IN 子句用于过滤出不在指定列表中的行。与 IN 子句相反,NOT IN 子句返回不匹配列表中任何值的行。

例如,假设有一个名为 products 的表,其中包含 product_idproduct_name 列。以下查询将返回 product_id 不在列表 [1, 2, 3] 中的所有行:

代码语言:sql
复制
SELECT * FROM products
WHERE product_id NOT IN (1, 2, 3);

在处理 NULL 值时,NOT IN 子句可能会导致意外的结果。当 NULL 值与任何其他值进行比较时,结果都是 NULL,而不是 TRUEFALSE。因此,在使用 NOT IN 子句时,如果其中一个列表值为 NULL,则整个条件将被视为 NULL,而不是 TRUEFALSE

例如,以下查询将返回 product_id 不等于 1NULL 的所有行:

代码语言:sql
复制
SELECT * FROM products
WHERE product_id NOT IN (1, NULL);

为了避免这种情况,可以使用 NOT IN 子句的替代方法,即使用 NOT EXISTS 子句。以下查询将返回与上面的示例相同的结果,但可以更好地处理 NULL 值:

代码语言:sql
复制
SELECT * FROM products
WHERE NOT EXISTS (
  SELECT 1 FROM (VALUES (1), (NULL)) AS x(value)
  WHERE product_id = x.value
);

总之,NOT IN 子句是一种过滤数据的有效方法,但在处理 NULL 值时需要注意。使用 NOT EXISTS 子句可以避免这些问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券