Sql “我可以吗?”;“不存在的地方”;第条应与其他条件结合使用

Sql “我可以吗?”;“不存在的地方”;第条应与其他条件结合使用,sql,Sql,我想检查一组ID是否存在于另一组中 如果其中一个的查询为: select distinct p.personID from log L left join person p ON l.tableID = p.personid where l.tablename like 'person' and l.date between '2018-01-01' and '2018-02-01' and (l.type like 'insert' or l.type like 'upda

我想检查一组ID是否存在于另一组中

如果其中一个的查询为:

select distinct p.personID

from log L
 left join person p ON l.tableID = p.personid

where
     l.tablename like 'person'
 and l.date between '2018-01-01' and '2018-02-01'
 and (l.type like 'insert' or l.type like 'update')

group by p.personid
另一个是

select distinct p.personID

from log L
 left join person p ON l.tableID = p.personid

where
     l.tablename like 'person'
 and l.date > '2018-02-01'

group by p.personid
所以这个“不存在”似乎是我需要的,但它似乎不适用于where条件。那么,有没有一种方法可以代替excel vlookup在查询中执行此检查

编辑:好的,我知道“不存在”不是我需要的东西。 示例结果将是: 设置一个返回值:1,2,3,4,5 设置两个返回:1,4,6,7,8,9,10
最后我想得到的结果是2,3,5。结果出现在第一个查询中,而不出现在第二个查询中,这就是为什么我认为not exist可能是我所需要的。

如果您使用like,而不使用运算符“%”它的like使用“=”(从某种意义上说,这是like的一种特殊情况)

如果您已经在使用distinct,则不必使用GROUP BY, 无论哪种情况都有效,在查询中最好使用distinct

select distinct p.personID

from log L
 left join person p ON l.tableID = p.personid

where
     l.tablename like '%person%'
 and l.date between '2018-01-01' and '2018-02-01'
 and (l.type like '%insert%' or l.type like '%update%')

所以你想要满足第一个条件而不是第二个条件的人

首先,假设您的数据库是合理的,您不需要加入
join

第二,一种方法使用
分组方式

select l.tableID
from log l
where l.tablename = 'person' and
      l.date >= '2018-01-01'
group by l.tableID
having sum(case when l.date >= '2018-01-01' and
                     l.date < '2018-02-01' and
                     l.type in ('insert', 'update')
                then 1 else 0
           end) > 0 and
          sum(case when l.date >= '2018-02-01'
                   then 1 else 0
              end) = 0;
选择l.tableID
从日志l
其中l.tablename='person'和
l、 日期>='2018-01-01'
按l.tableID分组
具有总和(如l.date>='2018-01-01'和
l、 日期<'2018-02-01'和
l、 键入('插入','更新')
然后是1或0
结束)>0和
金额(l.date>=“2018-02-01”时的情况)
然后是1或0
结束)=0;

您可以使用
p.personid not in(其他选择查询)
第一个查询的where子句中的not EXISTS与此无关…您可以使用
p.personid not in(其他选择查询)
这是MS SQL Server、MySQL、Oracle、PostgreSQL、Hive等吗?您想一次检查一行,还是正在检查“第一个集合的全部是否包含在第二个集合中”?换句话说,显示一些示例数据以及您想要从中得到的结果。@Nadeem谢谢,这是有效的。我不知道这是SQL的一般情况还是我正在处理的某个特定情况,但对于我的查询“=”和“like”“不要这样做。如果我在检查一个字符串,它必须是like,否则会出现各种错误。而等号对数字起作用。例如,在上面的问题中,如果我写l.tablename='person',我会得到一个错误,如果它与like一起工作,我的意图是如果没有“%”,你就误用了like运算符。在这种情况下,它本质上是一个等号。在我的回答中,我处理过这件事。谢谢你,我会调查的。