复杂加入sql

时间:2014-07-25 13:16:46

标签: sql oracle join

我有以下的senario

table1 - 拥有1001(主键)的1条记录 table2 - 具有相同id(1001)的3条记录 - 不作为主键
table3 - 具有相同id(1001)的3条记录 - 不作为主键

前两个表的连接返回3行(很好)。但是,如果我加入table3,那么它将返回9行。我知道如何加入工作和结果。

我的结果只需要3行。如下所示

 id      name     age     sex      city     
1001     Jhon      20      A        Z  
1001     Jhon      20      B        Y
1001     Jhon      20      C        X 

Here is fiddle example

1 个答案:

答案 0 :(得分:0)

This query可以做你要求的。要更改Table2和Table3之间的组合,您可以处理两个ORDER BY子句。无论如何真的很奇怪!你确定你做得对吗?

with ord_t2 as (
    select idt1 as id, sex, row_number() over(partition by idt1 order by sex) as ord_no
    from table2 t2
  ), ord_t3 as (
    select idt3 as id, city, row_number() over(partition by idt3 order by city) as ord_no
    from table3 t3
  ), t2_x_t3 as (
    select id, sex, city
    from ord_t2
      natural full outer join ord_t3
  )
select *
from Table1
  natural left join t2_x_t3