sny*_*sny 1 sql oracle oracle11g
在表T中,我试图删除具有相同A值的组中的所有记录,但仅当该组的所有成员都将B设置为"x"时.
鉴于表T:
+-------+--------+
| A | B |
+-------+--------+
| 2 | '' |
| 2 | 'x' |
| 2 | '' |
| 8 | 'x' |
| 8 | 'x' |
| 15 | '' |
| 15 | '' |
+-------+--------+
Run Code Online (Sandbox Code Playgroud)
必须删除A == 8的两个记录,因为它们中的所有两个都具有B == 1.A == 2的组具有B的混合值,因此它保持不变.并且A == 15的组没有全部B等于1它也保持不变.
这可以通过一个查询来完成吗?
如果没有,任何其他方式对于具有大量记录的表来说足够快?
你可以试试这个查询:
delete from T
where A in (
select A
from T
group by A
having sum(B) = count(*)
)
Run Code Online (Sandbox Code Playgroud)
如果列b可以包含非0/1值,则可以添加其他条件:
having sum(B) = count(*) and min(b)=1 and max(b)=1
如果你不能使用数值,你可以使用min/max,就像
having min(b)='x' and max(b)='x'
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |