SQL查询正在比较找到的2个集合之间的列

SQL查询正在比较找到的2个集合之间的列,sql,sql-server,Sql,Sql Server,我有一个表,我们称之为BUS,它有两列,分别是DATE和TAG 我想做两个查找,如下所示 问题1 我想比较这两个找到的集合,并删除查询1中的标记与查询2中的标记相等的任何行 我试过交叉路口,但我认为那不是正确的方法。我不能对这样的问题耿耿于怀。有什么建议吗?这是查询 delete from BUS where DATE < '2009-03-01' and tag in (select tag from BUS where DATE >= '2009-03-01') 您的问题的

我有一个表,我们称之为BUS,它有两列,分别是DATE和TAG

我想做两个查找,如下所示

问题1

我想比较这两个找到的集合,并删除查询1中的标记与查询2中的标记相等的任何行

我试过交叉路口,但我认为那不是正确的方法。我不能对这样的问题耿耿于怀。有什么建议吗?

这是查询

delete
from BUS
where DATE < '2009-03-01' 
and tag in 
(select tag from BUS where DATE >= '2009-03-01')

您的问题的另一个解决方案:

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

您可以简单地执行以下操作:

select tag
from BUS
group by tag
having min(date) < '2009-03-01' and
       max(date) >= '2009-03-01';

这个表中没有主键吗?
-- 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';
select tag
from BUS
group by tag
having min(date) < '2009-03-01' and
       max(date) >= '2009-03-01';