我有一个表,我们将其称为BUS
,它有两列,分别称为DATE
和TAG
我想做两个发现,如下所示
查询1
select *
from BUS
where DATE < '2009-03-01'
&
查询2
select *
from BUS
where DATE >= '2009-03-01'
我想比较这两个发现的集合,并删除查询1中的TAG
等于查询2中的TAG
的所有行。
我尝试过一个INTERSECT,但我认为这不是正确的方法。我无法解决这种查询。有什么建议吗?
答案 0 :(得分:1)
这是查询。
delete
from BUS
where DATE < '2009-03-01'
and tag in
(select tag from BUS where DATE >= '2009-03-01')
答案 1 :(得分:1)
您可以简单地做到:
select tag
from BUS
group by tag
having min(date) < '2009-03-01' and
max(date) >= '2009-03-01';
答案 2 :(得分:0)
另一个解决问题的方法:
-- SELECT b1.*
DELETE b1
FROM BUS b1
INNER JOIN BUS b2 ON b1.TAG = b2.TAG
WHERE b1.DATE < '2009-03-01' AND b2.DATE >= '2009-03-01';
在执行查询之前,您可以注释掉DELETE
语句,取消注释SELECT
语句,并检查这些行是否是您想要删除的行。
类似的示例可以在文档中看到(向下滚动)和其他一些SO问题: