Oracle 中不使用NOT IN 和 NOT EXISTS的另一種方法
用LEFT JOIN 代替NOT IN 或 NOT EXISTS:
SQL> conn scott/tiger
Connected.
SQL> CREATE TABLE testa
2 (
3 id number,
4 value varchar2(10)
5 );
Table created.
SQL> INSERT INTO testa VALUES(1,'a');
1 row created.
SQL> INSERT INTO testa VALUES(2,'b');
1 row created.
SQL> INSERT INTO testa VALUES(3,'c');
1 row created.
SQL> INSERT INTO testa VALUES(4,'d');
1 row created.
SQL> INSERT INTO testa VALUES(5,'e');
1 row created.
SQL> INSERT INTO testa VALUES(6,'f');
1 row created.
SQL> COMMIT;
Commit complete.
SQL> CREATE TABLE testb AS
2 SELECT * FROM testa WHERE 1=0;
Table created.
SQL> INSERT INTO testb VALUES(2,'b');
1 row created.
SQL> INSERT INTO testb VALUES(4,'d');
1 row created.
SQL> INSERT INTO testb VALUES(6,'f');
1 row created.
SQL> COMMIT;
Commit complete.
用左連線,結果testb表裡TempColum的值為NULL:
SQL> SELECT a.*,b.id "TempColum" FROM testa a LEFT JOIN testb b ON a.id=b.id;
ID VALUE TempColum
---------- ---------- ----------
2 b 2
4 d 4
6 f 6
5 e NULL
3 c NULL
1 a NULL
6 rows selected.
將NULL值過濾出來就是最後需要的結果:
SQL>
SELECT c.id,c.value FROM
(
SELECT a.*,b.id "TempColum" FROM testa a LEFT JOIN testb b ON a.id=b.id
) c
WHERE c."TempColum" IS NULL
ORDER BY c.id
SQL>
ID VALUE
---------- ----------
1 a
3 c
5 e
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16400082/viewspace-692708/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中的exists和not exists和in用法詳解Oracle
- oracle中關於in和exists,not in 和 not existsOracle
- oracle中的exists 和not exists 用法詳解Oracle
- oracle中in和exists的區別Oracle
- [Oracle] exists 和 not existsOracle
- ORACLE 中IN和EXISTS比較Oracle
- Oralce 使用SQL中的exists 和not exists 用法詳解SQL
- (轉)ORACLE 中IN和EXISTS的區別Oracle
- Oracle中exists和in的效能差異Oracle
- (轉)ORACLE 中IN和EXISTS比較Oracle
- oracle中的exists理解Oracle
- In和exists使用及效能分析(二):exists的使用
- SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差別SQL
- SQL中EXISTS的使用SQL
- sql中in和exists的原理及使用場景。SQL
- In和exists使用及效能分析(三):in和exists的效能分析
- [Oracle] minus 和 not exists比較Oracle
- Oracle學習系列—資料庫優化—In和Exists的使用Oracle資料庫優化
- In和exists使用及效能分析(一):in的使用
- SQL中IN和EXISTS用法的區別SQL
- oracle 索引和不走索引的幾種形式Oracle索引
- exists和not exists及in和not in的用法與區別
- Oracle中刪除使用者下所有物件的多種方法Oracle物件
- Android加快編譯速度的另一種方法Android編譯
- Python 判斷質數的另一種方法Python
- Window中Oracle服務啟動時並不啟動例項的兩種方法Oracle
- html中引入另一個html的方法HTML
- Oracle中“HINT”的使用方法Oracle
- Oracle中sequence的使用方法Oracle
- ss:檢視網路連線的另一種方法
- oracle exists and not existOracle
- in/exists和not in/not exists執行效率
- React中的另一種狀態管理方案ValtioReact
- python中list的各種方法使用Python
- DCI中場景的另一種實現和思考
- oracle in與exists 的區別Oracle
- ts類中屬性定義的另一種方式
- 淺談Oracle中exists與in的執行效率問題Oracle