首页 > 解决方案 > 在 Oracle SQL 中比较同一列的数据

问题描述

我需要根据另一行比较同一列的数据。假设我有一个显示如下详细信息的表格:

用户名 服务 特权
美国广播公司 测试 审计
XYZ 测试 1 维持
XYZ 测试 1 管理
XYZ 测试 1 审计

我想要这样的结果:

用户名 服务 特权
XYZ 测试 1 维持
XYZ 测试 1 管理

基本上,我想删除在多个服务中使用的所有权限,例如在测试和测试 1 服务中都使用了审核权限。

如何使用 Oracle SQL 实现此解决方案?

标签: sqloracle

解决方案


一种方法使用带有相关子查询的删除:

DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE t2.Privilege = t1.Privilege AND t2.Service <> t1.Service);

上面的查询,用简单的英语阅读,表示删除任何我们可以找到与不同服务相关联的相同权限的权限记录。


推荐阅读