Sql 选择ID中包含重复值的所有行,并将其从上一个表中删除
我有一个表C,它被创建为a和B的并集。可以按如下方式创建足以解决我的问题的简化版本:Sql 选择ID中包含重复值的所有行,并将其从上一个表中删除,sql,Sql,我有一个表C,它被创建为a和B的并集。可以按如下方式创建足以解决我的问题的简化版本: CREATE TABLE C ( ID int, String varchar(50), ); insert into C values (1,'afa') insert into C values (1,'afa') insert into C values (2,'afa') insert into C values (3,'afa') insert into C values (4,'afa') in
CREATE TABLE C
(
ID int,
String varchar(50),
);
insert into C values (1,'afa')
insert into C values (1,'afa')
insert into C values (2,'afa')
insert into C values (3,'afa')
insert into C values (4,'afa')
insert into C values (4,'afa')
insert into C values (5,'afa')
insert into C values (6,'afa')
我需要选择ID列中包含重复值的所有行,然后很可能需要从表B中删除具有这些ID的行。表A和B不包含重复值
select查询的结果应该如下
ID string
1 afa
1 afa
4 afa
4 afa
顺便说一句:ID重复的其他列略有不同,所以我不会首先使用union将其删除
我不确定我是否理解你的问题。。是否要从表a上的表b中删除ID?如果是,您可以使用EXISTS(): 要仅将其选择为@artm建议值,请执行以下操作:
SELECT ID FROM c
GROUP BY ID
HAVING COUNT(*) > 1
或者同样存在:
SELECT ID from B
WHERE exists(SELECT 1 FROM A
WHERE B.ID = A.ID)
编辑:若要获取发布的结果,假设C表还不存在:
SELECT * FROM (
SELECT * FROM B
UNION
SELECT * FROM A) t
WHERE t.id IN(SELECT ID FROM(SELECT ID FROM A
UNION
SELECT ID FROM B)
GROUP BY ID
HAVING COUNT(*) > 1)
使用
Group by
和Having
查找此类重复项:
select id
from c
group by id
having count(*) > 1;
如果需要从表B中删除数据,请升级上一个查询:
delete
from B
where id in (
select id
from c
group by id
having count(*) > 1);
更新:
如果您希望收到您列出的结果:
select *
from c
where id in (
select id
from c
group by id
having count(*) > 1);
结果:
ID string
1 afa
1 afa
4 afa
4 afa
按id分组计数(*)>1这不是我需要的我需要选择查询的结果看起来我会编辑问题为什么不添加结果?谢谢首先需要选择,询问有关它的问题,然后可能会删除
ID string
1 afa
1 afa
4 afa
4 afa