SQL JOIN或UNION在相同的id上

时间:2016-02-02 16:41:43

标签: sql oracle

你好如何从两张表中获取

 | id | name  |
 |----|-------|
 | 1  | John  |
 | 1  | Bruce |
 | 1  | Tom   |

 | id | goal  |
 |----|-------|
 | 1  | 11    |
 | 1  | 22    |

选择

之类的结果
 | id | name |goal  |
 |----|------|------|
 | 1  |John  | 11   |
 | 1  |Bruce | 22   |
 | 1  |Tom   |      |

我尝试了加入和联盟,但我没有得到任何结果,请帮忙!使用oracle pl / sql。

1 个答案:

答案 0 :(得分:1)

这有点棘手。您没有用于生成值的连接键。事实上,实际上没有办法对齐"这样的值,因为SQL表本质上是无序的。

您可以做的一件事就是生成一个行号并将其用于join。一种方法是:

select id, max(name) as name, max(goal) as goal
from ((select id, name, NULL as goal, rownum as rn
       from t1
      ) union all
      (select id, NULL, goal, rownum as rn
       from t2
      )
     ) t12
group by id, rn;

注意:两列中的订单相对于彼此是任意的,除非您有一个指定订单的列。