Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择ID中包含重复值的所有行,并将其从上一个表中删除_Sql - Fatal编程技术网

Sql 选择ID中包含重复值的所有行,并将其从上一个表中删除

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

我有一个表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')
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