SQL:删除组中的不同行?

时间:2018-04-06 14:56:56

标签: sql oracle

有点难以解释,但我需要一个查询来删除一个分组具有不同值的行...?

示例表:

1) A  1
2) A  1 
3) B  2
4) B  3 
5) C  3
6) C  3

将列分组:A1 A1 B2 B3 C3 C3。我想从表中删除第3行和第4行(B2和B3)。这些字母来自一个表格,与另一个包含数字的表格相连接。

如果这对任何人都有意义,那么任何帮助都会受到赞赏。

* edit:查询示例以获取上表:

select a.id, b.id from tableA a
join tableB b on a.first_col = b.second_col

2 个答案:

答案 0 :(得分:0)

您可以应用窗口化聚合,因为大多数DBMS不支持COUNT( DISTINCT) OVER您可以将逻辑切换为:

select col1, col2
from 
 (
   select a.id as col1, b.id as col2
      min(b.id) over (partition by a.id) as mincol2
      max(b.id) over (partition by a.id) as maxcol2
   from tableA a
   join tableB b 
     on a.first_col = b.second_col
 ) dt
where mincol2 <> maxcol2

答案 1 :(得分:0)

我很好奇为什么你想要重复的行。当所有ID都相同时,这将返回一个id对:

select a.id, max(b.id)
from tableA a join
     tableB b
     on a.first_col = b.second_col
group by a.id
having min(b.id) = max(b.id);

如果您想要与ID匹配的行数,可以包含count(*)