如何确定记录是不是是 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/…。
您可以稍微改述一下您的问题吗? “告诉我”是什么意思? IN
和 NOT 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 的一部分而不是不存在?的主要内容,如果未能解决你的问题,请参考以下文章
我想从 GridView 中删除记录。在此之前要求确认,例如“您确定要删除吗?”
SSIS OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005,无法确定元数据