的SQL可以很容易地被壓縮成一個單一的DELETE語句。這是因爲DELETE語句在找不到要刪除的行時不會拋出異常。
鑑於這種測試數據:
SQL> select * from tbl1
2/
ID NUM
---------- ----------
10 999
20 999
10 888
SQL> select * from tbl2
2/
ID
----------
10
SQL>
我們通過在同值的兩倍;第一時間的記錄將被刪除,下一次什麼也沒有發生,但優雅....
SQL> DELETE FROM tbl1 a
2 WHERE a.num = '&num'
3 and exists (select b.id
4 from tbl2 b
5 WHERE a.id = b.id)
6/
Enter value for num: 999
old 2: WHERE a.num = '&num'
new 2: WHERE a.num = '999'
1 row deleted.
SQL>/
Enter value for num: 999
old 2: WHERE a.num = '&num'
new 2: WHERE a.num = '999'
0 rows deleted.
SQL>
當然,你可以在這裏提出一個簡化的情況下,你的真正需求更加複雜。如果是這樣,請編輯你的問題,以反映更真實的東西。
來源
2011-06-01 12:21:33
APC
是的它可能 - 但你沒有提供任何關於你如何實現這一點的信息 - sql * plus?還有別的嗎? – symcbean 2011-06-01 12:06:17
是的,sqlplus,對不起,先不提 – newAndroidUser 2011-06-01 12:07:41