Oracle PL/SQL的(+)
符號代表OUTER JOIN
的意思。
不過Oracle官方直接建議還是直接使用OUTER JOIN
語法,不建議使用舊的(+)
語法。
此外在Java程式JDBC使用舊的(+)
語法會導致ResultSet
部分欄位的值為空,所以還是不要使用吧。
Outer join operator (+)
使用範例如下。
-- RIGHT OUTER JOIN
SELECT * table_a a, table_b b
WHERE a.column_01(+) = b.column_03; -- right outer join
-- 上面的寫法相當於下面的RIGHT OUTER JOIN寫法
SELECT * FROM table_a a
RIGHT OUTER JOIN table_b b ON a.column_01 = b.column_03;
-- RIGHT OUTER JOIN
SELECT * table_a a, table_b b
WHERE a.column_01(+) = b.column_03
AND a.column_02(+) = '123'
AND a.column_03 = 'X'; -- right outer join
-- 上面的寫法相當於下面的RIGHT OUTER JOIN寫法
SELECT * FROM table_a a
RIGHT OUTER JOIN table_b b ON a.column_01 = b.column_03
AND a.column_02 = '123'
WHERE a.column_03 = 'X';
-- LEFT OUTER JOIN
SELECT * table_a a, table_b b
WHERE a.column_01 = b.column_03(+); -- left outer join
-- 上面的寫法相當於下面的LEFT OUTER JOIN寫法
SELECT * FROM table_a a
LEFT OUTER JOIN table_b b ON a.column_01 = b.column_03;
以下是幾點使用上的限制:
- 若查詢SQL的
FROM
子句有JOIN
語法則不可使用(+)
,否則會出現ORA-25156:old style outer join (+) cannot be used with ANSI joins
錯誤。 (+)
只能用在WHERE
子句。(+)
只能用在TABLE或VIEW的column上。- 如果一個TABLE是outer query,另外一個TABLE是inner query,則
(+)
無法產生outer join (+)
無法self outer join(+)
只能用在column上,不能用在表示式上。- WHERE條件中含有
(+)
則無法與OR
一起使用,會出現ORA-01719:outer join operator (+) not allowed in operand of OR or IN
錯誤
-- 下面會出現ORA-01719錯誤
SELECT * table_a a, table_b b
WHERE a.column_01(+) = b.column_03
OR a.column_01 > 100; -- 不能與OR一起使用
IN
來與有(+)
的column進行比較。(+)
的column進行比較。參考:
沒有留言:
張貼留言