ORACLE SQL 删除带有连接的查询结果
ORACLE SQL deleting the results of a query with a join
我有这个 select,它使用内部联接正常运行并获得预期结果并将这些结果导出为插入语句。我遵循了此处找到的几个示例,但似乎无法正确形成语句。
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 数据库中,我已经将 select 的结果写为插入语句。我想在 PRODUCTION 中删除这些记录并使用插入从 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
没有,全部删除了。
这个 SQL 使用 EXISTS 应该做到:
delete from app_access a
where exists
(select 'x' from persl b
where b.empid = a.empid
and b.cad_cmd_mask = 7864320);
不过,我注意到你写道:
“我想在 PRODUCTION 中删除这些记录并使用插入从 DEV 中放入更新的记录。”
您的意思是要删除 Production 中的记录,然后在 DEV 中更新它们,然后将更新后的记录插入回 Production 中?如果是这样,为什么不在生产中更新它们而不是删除它们?您仍然可以先将记录插入 DEV,然后在生产中测试更新。
我有这个 select,它使用内部联接正常运行并获得预期结果并将这些结果导出为插入语句。我遵循了此处找到的几个示例,但似乎无法正确形成语句。
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 数据库中,我已经将 select 的结果写为插入语句。我想在 PRODUCTION 中删除这些记录并使用插入从 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
没有,全部删除了。
这个 SQL 使用 EXISTS 应该做到:
delete from app_access a
where exists
(select 'x' from persl b
where b.empid = a.empid
and b.cad_cmd_mask = 7864320);
不过,我注意到你写道:
“我想在 PRODUCTION 中删除这些记录并使用插入从 DEV 中放入更新的记录。”
您的意思是要删除 Production 中的记录,然后在 DEV 中更新它们,然后将更新后的记录插入回 Production 中?如果是这样,为什么不在生产中更新它们而不是删除它们?您仍然可以先将记录插入 DEV,然后在生产中测试更新。