如何解决ORACLE SQL 删除带有连接的查询结果
我有这个选择,它使用内部连接正常运行并获得预期结果并将这些结果导出为插入语句。我遵循了此处找到的几个示例,但似乎无法正确形成语句。
select a.* from app_access A inner join PERSL B on A.empid = B.EMPID and B.CAD_CMD_MASK=7864320;
我想删除此查询的结果。这就是我现在所在的地方。在遵循此处找到的几个示例后,我似乎无法正确形成该语句。
delete a.* from app_access where app_access A inner join PERSL B on A.empid = B.EMPID and B.CAD_CMD_MASK=7864320;
一些背景知识 - 这是在 DEV 数据库中,我已将选择的结果写入插入语句。我想在 PRODUCTION 中删除这些记录,并使用 insert 放入来自 DEV 的更新记录。
解决方法
使用:
delete app_access
where empid IN (SELECT B.EMPID FROM PERSL B WHERE B.CAD_CMD_MASK=7864320)
,
EXISTS
可能是一种选择。
由于我没有您的表格,请查看基于 Scott 的 EMP
和 DEPT
表格的示例。
部门 10 中的当前数据:
SQL> select d.deptno,d.dname,e.ename
2 from dept d left join emp e on e.deptno = d.deptno
3 where d.deptno = 10;
DEPTNO DNAME ENAME
---------- -------------- ----------
10 ACCOUNTING CLARK
10 ACCOUNTING KING
10 ACCOUNTING MILLER
重复使用该查询来删除这些行:
SQL> delete from emp a
2 where exists (select null
3 from dept d left join emp e on e.deptno = d.deptno
4 where d.deptno = 10
5 and e.empno = a.empno
6 );
3 rows deleted.
还有什么吗?
SQL> select count(*) From emp where deptno = 10;
COUNT(*)
----------
0
不,所有内容都已删除。
,这个使用 EXISTS 的 SQL 应该可以:
delete from app_access a
where exists
(select 'x' from persl b
where b.empid = a.empid
and b.cad_cmd_mask = 7864320);
但是,我注意到你写道:
“我想删除 PRODUCTION 中的这些记录,并使用 insert 放入来自 DEV 的更新记录。”
您的意思是要删除 Production 中的记录,然后在 DEV 中更新它们,然后将更新的记录插入回 Production 中吗?如果是这样,为什么不在生产中更新它们而不是删除它们?您仍然可以先将记录插入 DEV,然后在生产中测试更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。