我有一个表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不包含重复值。
选择查询的结果应该像
ID string
1 afa
1 afa
4 afa
4 afa
顺便说一句:ID重复的其他列略有不同所以我不会在第一时间使用union删除它
THX
答案 0 :(得分:0)
我不确定我理解你的问题..你想删除表a中出现的表b中的ID?如果是这样,你可以使用EXISTS():
DELETE FROM B
WHERE EXISTS(SELECT 1 FROM A
WHERE B.id = A.id)
仅将其选为@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)
答案 1 :(得分:0)
使用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