如何确定记录是不是是 NOT IN 的一部分而不是不存在?

Posted

技术标签:

【中文标题】如何确定记录是不是是 NOT IN 的一部分而不是不存在?【英文标题】:How to determine if record is a part of NOT IN versus doesn't exist?如何确定记录是否是 NOT IN 的一部分而不是不存在? 【发布时间】:2020-08-04 20:41:20 【问题描述】:

改写原文。

如何使用以下查询或类似查询:

select * from table where name="Jack" AND ID NOT IN (1,2,3,4,5) ;

要确定两者之间的区别:

    找到Jack 记录,但它的 ID 存在于 (1,2,3,4,5) 中,因此没有返回任何内容 并且,没有找到 Jack 记录,因此没有返回任何内容

这是否可以使用 IF 语句或类似的东西......或者有更好的方法来做到这一点?

【问题讨论】:

IN(false)NOT IN(true) 是相同的。看看dba-oracle.com/…。 您可以稍微改述一下您的问题吗? “告诉我”是什么意思? INNOT IN 是过滤器,它们允许返回更多或更少的行。您的预期输出是什么? 请提供示例数据和所需结果以澄清您的问题。 我澄清了问题 Why should I provide a Minimal Reproducible Example for a very simple SQL query? 【参考方案1】:

我的建议:一个查询来获取状态(“匹配”、“找到 Jack,但错误的 id”、“没有找到 Jack”)和匹配(如果有任何外部连接):

select s.status, t.*
from
(
  select
    case 
      when sum(name = 'Jack' and id not in (1,2,3,4,5)) then 'MATCH'
      when sum(name = 'Jack') then 'WRONG ID'
      else 'NO JACK'
    end as status
  from t
) s
left join t on t.name = 'Jack' and t.id not in (1,2,3,4,5);

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=02733107f41bc51600a422f2911c6f6b

【讨论】:

以上是关于如何确定记录是不是是 NOT IN 的一部分而不是不存在?的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中运行搜索后如何显示“未找到记录”

我想从 GridView 中删除记录。在此之前要求确认,例如“您确定要删除吗?”

SSIS OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005,无法确定元数据

如何设置CentOS 7开机自动获取IP地址详解

详解如何设置CentOS 7开机自动获取IP地址

从mysql数据库中提取5条随机记录[关闭]