最近遇到乙個sql如下
select i.client_id, '3' status, '1' exchange_type
from dev.openstock_active op,
dev.prestock_account p,
dev.preclient_info i
where op.active_result = 1
and op.preengage_id = p.preengage_id(+)
and p.preengage_id is null
and op.preengage_id = i.preengage_id
and p.exchange_type(+) = '1'
其中 op.preengage_id = p.preengage_id(+) 為 left join 或 right join 的另一種寫法。p.exchange_type(+) = '1'卻 讓我一下看懵了。經過大神的講解。
p.exchange_type(+) = '1' 的 (+) 並不是表示 連線 1 這個字段 而是 作為 p表連線時的條件。將(+)這種寫法還原成left join寫法即可明白。舉個簡單的例子:
①select * from a
left join b
on a.id = b.id
where b.type ='1'
這種情況是 a表先關聯 b表 然後篩選出 b.type =『1』的記錄
②select * from a
left join b
on a.id =b.id and b.type ='1'
這種情況是 a表去關聯 b表中b.type ='1'的記錄
因此①②查詢出的數量上並不相同。而最開始的 p.exchange_type(+) = '1' 這種寫法 表示的就是 p.exchange_type = '1' 這個條件是加在 on之後 而不是在where之後的。即原sql符合的情景應該是② 例子表達的意思。
Oracle 中的Top寫法
oracle 中的top寫法 由於oracle不支援select top 語句,所以在oracle中經常是用order by 跟rownum 的組合來實現select top n的查詢。簡單地說,實現方法如下所示 select 列名1 列名n from select 列名1 列名n from 表名 ...
Oracle 的連線查詢記錄
先 兩張表 建表語句如下 create table a id number primary key,name varchar2 20 class varchar2 40 homeaddress varchar2 200 create table b classid number primary ke...
Oracle中PL SQL中if語句的寫法介紹
複製 如下 if語句 判斷使用者輸入的數字。set serveroutput on 接收鍵盤輸入 accept num prompt 請輸入乙個數字 declare nbfaqqlsysp 將螢幕輸入的數字付給變數 pnum number begin if pnum 0 then dbms outp...