Oracle SQL Join查询说明

时间:2016-06-30 10:17:08

标签: sql oracle join

我已经澄清了如何使用Oracle SQL连接。

情境:

我有两张桌子。

T1具有以下结构

cId,pId,uId,catId,catName,tId,tName,tEvent

&安培; T2具有以下结构

cId,uId,pId

PS: cId,uId和pId是常见的列

我想要一个sqL语句,它将为我提供以下内容

1)T1上有或没有匹配的所有记录

2)T2上的记录不在T1中。

例如: -

T1

cId     pId     uId     catId       catName     tId     tName   tEvent

1001    2010    dolp      11         Amber      1100     Rod     Login
1001    2014    dolp      11         Amber      1100     Rod     Login
1002    2010    dolp      13         Anders     1500     Oli     Login
1003    2010    dolp      14         Rock       1501     Ret     Login
1004    2010    dolp      15         Lila       1600     Win     Login

T2

cId     pId     uId

1001    2010    dolp
1001    2015    dolp

查询应提供以下结果:

cId     pId     uId     catId       catName     tId     tName   tEvent

1001    2010    dolp      11         Amber      1100     Rod     Login 
{Record in T1}
1001    2014    dolp      11         Amber      1100     Rod     Login {Record in T1}
1002    2010    dolp      13         Anders     1500     Oli     Login {Record in T1}
1003    2010    dolp      14         Rock       1501     Ret     Login {Record in T1}
1004    2010    dolp      15         Lila       1600     Win     Login {Record in T1}
1001    2015    dolp      11         Amber      1100     Rod     Login {Record in T2}

对此的帮助非常感谢。

感谢。

2 个答案:

答案 0 :(得分:2)

1)T1上的所有记录,包括T2匹配或不匹配

SELECT T1.*
FROM T1 LEFT OUTER JOIN T2 ON T2.cId=T1.cId 
                          AND T2.uId=T1.uId 
                          AND T2.pId=T1.uId
/ 

2)T2上的记录不在T1中。

SELECT T2.*
FROM   T2
WHERE NOT EXISTS 
             (SELECT 1 
              FROM   T1 
              WHERE  T1.cId=T2.cId 
                AND  T1.uId=T2.uId 
                AND  T1.pId=T2.uId)
/

答案 1 :(得分:0)

使用左外连接,其中T2是第一个表。以下参考了解连接。

(X.T.reshape((d,m*n)) * Y.T.reshape((d,n*m))).sum(axis=0).reshape((m,n)).T

参考:http://www.techonthenet.com/oracle/joins.php