Sql Oracle(+;)运算符等号

Sql Oracle(+;)运算符等号,sql,oracle,Sql,Oracle,我知道(+)运算符在此查询中的作用: SELECT * FROM TBL_TEST t, TBL_TEST_2 t2 WHERE t.FIELD (+) = t2.FIELD; 但(+)运算符在此类查询中的作用如下: SELECT * FROM TBL_TEST t WHERE t.FIELD (+) = 2; 我不知道 有人能解释一下吗?迫使甲骨文承认它是外部连接 select * from ( select 1 n from dual )

我知道(+)运算符在此查询中的作用:

SELECT 
   * 
FROM
   TBL_TEST t, TBL_TEST_2 t2
WHERE
   t.FIELD (+) = t2.FIELD;
但(+)运算符在此类查询中的作用如下:

SELECT 
   * 
FROM
   TBL_TEST t
WHERE
   t.FIELD (+) = 2;
我不知道


有人能解释一下吗?

迫使甲骨文承认它是外部连接

select *
from ( select 1 n from dual
  ) t
where n (+) = n+1 
ORA-01416:两个表不能在外部相互连接


:)

强制Oracle承认其外部连接

select *
from ( select 1 n from dual
  ) t
where n (+) = n+1 
ORA-01416:两个表不能在外部相互连接


:)我有一个例子

    select * from xxtest
V_ID    V_NAME  V_ADDRESS
5   PriceList   349FDAFD34M
7   PriceList   349FDAFD34M
7   Footer1 349FDAFD34M
5   Footer1 349FDAFD34M
5   Header1 349FDAFD34M
7   Header1 349FDAFD34M




 select * from xxtest2
V_ID    V_NAME  V_ADDRESS
7   Header1 349FDAFD34M
查询01

    select * 
    from xxtest aa, xxtest2 bb 
    where aa.v_id = bb.v_id(+) and bb.v_id(+) = 7
V_ID    V_NAME  V_ADDRESS   V_ID    V_NAME  V_ADDRESS
7   PriceList   349FDAFD34M 7   Header1 349FDAFD34M
7   Footer1 349FDAFD34M 7   Header1 349FDAFD34M
7   Header1 349FDAFD34M 7   Header1 349FDAFD34M
5   PriceList   349FDAFD34M  -   -   - 
5   Footer1 349FDAFD34M  -   -   - 
5   Header1 349FDAFD34M  -   -   - 
查询02

    select * 
    from xxtest aa, xxtest2 bb 
    where aa.v_id = bb.v_id(+) and bb.v_id = 7
V_ID    V_NAME  V_ADDRESS   V_ID    V_NAME  V_ADDRESS
7   PriceList   349FDAFD34M 7   Header1 349FDAFD34M
7   Footer1 349FDAFD34M 7   Header1 349FDAFD34M
7   Header1 349FDAFD34M 7   Header1 349FDAFD34M

希望它能对你有所帮助。

我有一个例子

    select * from xxtest
V_ID    V_NAME  V_ADDRESS
5   PriceList   349FDAFD34M
7   PriceList   349FDAFD34M
7   Footer1 349FDAFD34M
5   Footer1 349FDAFD34M
5   Header1 349FDAFD34M
7   Header1 349FDAFD34M




 select * from xxtest2
V_ID    V_NAME  V_ADDRESS
7   Header1 349FDAFD34M
查询01

    select * 
    from xxtest aa, xxtest2 bb 
    where aa.v_id = bb.v_id(+) and bb.v_id(+) = 7
V_ID    V_NAME  V_ADDRESS   V_ID    V_NAME  V_ADDRESS
7   PriceList   349FDAFD34M 7   Header1 349FDAFD34M
7   Footer1 349FDAFD34M 7   Header1 349FDAFD34M
7   Header1 349FDAFD34M 7   Header1 349FDAFD34M
5   PriceList   349FDAFD34M  -   -   - 
5   Footer1 349FDAFD34M  -   -   - 
5   Header1 349FDAFD34M  -   -   - 
查询02

    select * 
    from xxtest aa, xxtest2 bb 
    where aa.v_id = bb.v_id(+) and bb.v_id = 7
V_ID    V_NAME  V_ADDRESS   V_ID    V_NAME  V_ADDRESS
7   PriceList   349FDAFD34M 7   Header1 349FDAFD34M
7   Footer1 349FDAFD34M 7   Header1 349FDAFD34M
7   Header1 349FDAFD34M 7   Header1 349FDAFD34M

希望它能对你有所帮助。

我在Oracle 12G中对它进行了测试,结果如下:

SELECT 
   * 
FROM
   TBL_TEST t
WHERE
   t.FIELD = 2;
我对原始代码的猜测是,如果字段等于2,则返回字段值,否则返回null。如下所示:

SELECT T.STUDENT, T2.*
  FROM TBL_TEST T
       LEFT OUTER JOIN (SELECT 2 COLU FROM DUAL) T2 ON T.COUNT = T2.COLU;

我在Oracle 12G中对其进行了测试,结果与以下结果相同:

SELECT 
   * 
FROM
   TBL_TEST t
WHERE
   t.FIELD = 2;
我对原始代码的猜测是,如果字段等于2,则返回字段值,否则返回null。如下所示:

SELECT T.STUDENT, T2.*
  FROM TBL_TEST T
       LEFT OUTER JOIN (SELECT 2 COLU FROM DUAL) T2 ON T.COUNT = T2.COLU;

外部联接的旧Oracle语法?这是表示外部联接的旧语法。如果没有连接,这就没有意义,即使您可以编写它。@Gadziu它仍然是左连接。这没有任何意义,我也这么认为。。。我检查了其他人的代码,我看到了类似这样的东西,它没有使sanse…旧的Oracle外部连接语法?这是表示外部连接的遗留语法。如果没有连接,这就没有意义,即使您可以编写它。@Gadziu它仍然是左连接。这没有任何意义,我也这么认为。。。我检查了别人的代码,我看到了这样的东西,它没有使sanse…谢谢,很多:)所以它现在有一种sanse:DThank很多:)所以它现在有一种sanse:D