SQL查询比较2个发现集之间的列

时间:2019-02-27 19:23:25

标签: sql sql-server

我有一个表,我们将其称为BUS,它有两列,分别称为DATETAG

我想做两个发现,如下所示

查询1

select * 
from BUS
where DATE < '2009-03-01'

查询2

select * 
from BUS
where DATE >= '2009-03-01'

我想比较这两个发现的集合,并删除查询1中的TAG等于查询2中的TAG的所有行。

我尝试过一个INTERSECT,但我认为这不是正确的方法。我无法解决这种查询。有什么建议吗?

3 个答案:

答案 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问题: