首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PostgreSQL 'NOT IN‘AND子查询

PostgreSQL 'NOT IN‘AND子查询
EN

Stack Overflow用户
提问于 2011-12-11 17:36:29
回答 3查看 155.7K关注 0票数 98

我正在尝试执行以下查询:

代码语言:javascript
复制
SELECT mac, creation_date 
FROM logs 
WHERE logs_type_id=11
AND mac NOT IN (select consols.mac from consols)

但是我没有得到任何结果。我测试了它,我知道它的语法有问题。在MySQL中,这样的查询可以完美地工作。我添加了一行,以确保consols表中不存在一个mac,但它仍然没有给出任何结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-11 17:39:08

使用NOT IN时,应确保所有值都不为NULL:

代码语言:javascript
复制
SELECT mac, creation_date 
FROM logs 
WHERE logs_type_id=11
AND mac NOT IN (
    SELECT mac
    FROM consols
    WHERE mac IS NOT NULL -- add this
)
票数 190
EN

Stack Overflow用户

发布于 2011-12-11 19:32:50

当使用NOT IN时,您还应该考虑NOT EXISTS,它会静默地处理null情况。另请参阅PostgreSQL Wiki

代码语言:javascript
复制
SELECT mac, creation_date 
FROM logs lo
WHERE logs_type_id=11
AND NOT EXISTS (
  SELECT *
  FROM consols nx
  WHERE nx.mac = lo.mac
  );
票数 30
EN

Stack Overflow用户

发布于 2011-12-11 20:27:03

您还可以使用左联接和IS NULL条件:

代码语言:javascript
复制
SELECT 
  mac, 
  creation_date 
FROM 
  logs
    LEFT JOIN consols ON logs.mac = consols.mac
WHERE 
  logs_type_id=11
AND
  consols.mac IS NULL;

在"mac“列上建立索引可能会提高性能。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8463043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档