【问题标题】:Oracle SQL Join query clarificationOracle SQL Join 查询说明
【发布时间】:2016-06-30 21:43:10
【问题描述】:

我有一个说明,要进行 wrt Oracle SQL 连接。

场景:

我有两张桌子。

T1 具有以下结构

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

&T2的结构如下

cId、uId、pId

PS: cId、uId 和 pId 是常用的列

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

1) T1 上的所有记录在 T2 中匹配或不匹配

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}

非常感谢您的帮助。

谢谢。

【问题讨论】:

  • 请澄清最后一行中的 catId、catName 等列如何获取它们的值。 T2 中没有这样的列。

标签: sql oracle join


【解决方案1】:

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)
/

【讨论】:

    【解决方案2】:

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

    select a.cId,a.pId,a.uId,b.catId,b.catName,b.tId,b.tName,b.tEvent from T2 a right outer join T1 b
    on a.cId = b.cId and a.pId =b.pId ;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      相关资源
      最近更新 更多