sql - 在 Oracle SQL 中比较同一列的数据
问题描述
我需要根据另一行比较同一列的数据。假设我有一个显示如下详细信息的表格:
用户名 | 服务 | 特权 |
---|---|---|
美国广播公司 | 测试 | 审计 |
XYZ | 测试 1 | 维持 |
XYZ | 测试 1 | 管理 |
XYZ | 测试 1 | 审计 |
我想要这样的结果:
用户名 | 服务 | 特权 |
---|---|---|
XYZ | 测试 1 | 维持 |
XYZ | 测试 1 | 管理 |
基本上,我想删除在多个服务中使用的所有权限,例如在测试和测试 1 服务中都使用了审核权限。
如何使用 Oracle SQL 实现此解决方案?
解决方案
一种方法使用带有相关子查询的删除:
DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.Privilege = t1.Privilege AND t2.Service <> t1.Service);
上面的查询,用简单的英语阅读,表示删除任何我们可以找到与不同服务相关联的相同权限的权限记录。
推荐阅读
- c++ - 如何在 C++ 中关闭输入流?
- c# - Distinct() 在用户定义的对象列表上没有按预期工作,也没有调用 Equals 方法
- php - 有没有办法在从代码发送的电子邮件中添加个人资料图片
- reactjs - TypeError: undefined is not an object (评估 'row[OBJECT_COLUMN_NAME] = key') | 反应原生
- java - 升级到 RestEasy 4.5.x 后出现 StackOverflowError
- sql - 无法根据 SQL Server 2016 中的所需格式按结果分组
- spring-security - 使用 Spring Security 5.2+ 在多线程上下文中有效地授权客户端凭据 OAuth2ClientRequest
- c# - 从 IViewComponentHelper 扩展方法中调用 Component.InvokeAsync()
- javascript - 使用 chrome.identity.launchWebAuthFlow 时如何防止提前关闭弹出窗口?
- rust - 在 Rust 中用于 CLI/config 的 Cobra/Viper-like crate