我想检查另一组中是否存在一组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。
编辑:确定,所以我知道“ NOT EXISTS”不是我所需要的。 示例结果将是: 设置返回值:1、2、3、4、5 设置两个返回值:1,4,6,7,8,9,10 我想最后得到的结果是2,3,5。结果出现在第一个查询中,而不出现在第二个查询中,这就是为什么我认为不存在可能是我需要的原因。
答案 0 :(得分:1)
您可以在第一个查询的where子句中使用p.personid not in (other select query)
答案 1 :(得分:0)
如果您使用的是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%')
答案 2 :(得分:0)
因此,您希望满足第一个条件但不满足第二个条件的人。
首先,假设您的数据库合理,则不需要join
。
第二,一种方法使用group by
:
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;