delete grpfrom grpleft join my_dataon grp.ID1 = my_data.ID1and grp.ID2 = my_data.ID2and grp.ID3 = my_data.ID3and grp.ID4 = my_data.ID4where my_data.ID1 is NulL
基本上,我想删除在grp中可以找到的所有事件,并且在my_data中没有任何等价性.不幸的是,它在Oracle 10g中不起作用.我尝试使用旧的语法左连接(),但它也不工作.喜欢这个:
delete grpfrom grp,my_datawhere grp.ID1 = my_data.ID1 (+)and grp.ID2 = my_data.ID2 (+)and grp.ID3 = my_data.ID3 (+)and grp.ID4 = my_data.ID4 (+)and my_data.ID1 is NulL
如果我没有多个密钥,但是我看不到如何使用我的数据,则IN子句将起作用.那么什么办法呢?
表格和数据:sql> create table grp (ID1 number null,ID2 number null,ID3 number null,ID4 number null); table created.sql> create table my_data (ID1 number null,ID4 number null);table created.sql> insert into grp values (1,2,3,4);1 row created.sql> insert into grp values (10,20,30,40);1 row created.sql> insert into grp values (1,40);1 row created.sql> insert into my_data values (1,4);1 row created.sql> commit;Commit complete.
使用in.注意如果子查询中的ID可以为空,请勿使用.不在null不会返回true.
sql> delete grp where (ID1,ID2,ID3,ID4) not in (select ID1,ID4 from my_data);2 rows deleted.sql> select * from grp; ID1 ID2 ID3 ID4---------- ---------- ---------- ---------- 1 2 3 4
使用存在
sql> rollback;Rollback complete.sql> delete grp where not exists (select * from my_data where grp.ID1 = my_data.ID1 and grp.ID2 = my_data.ID2 and grp.ID3 = my_data.ID3 and grp.ID4 = my_data.ID4);2 rows deleted.sql> select * from grp; ID1 ID2 ID3 ID4---------- ---------- ---------- ---------- 1 2 3 4sql>总结
以上是内存溢出为你收集整理的在Oracle 10g中使用左连接删除全部内容,希望文章能够帮你解决在Oracle 10g中使用左连接删除所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)