SQL Full Outer加入同一个表中的同一列

时间:2013-06-06 16:06:33

标签: sql oracle full-outer-join

这可能更像是一个设计问题,但我希望没有太多伏都教也可以。

假设我有一个这样的表:

SELECT * FROM stuff;

 id   grp
  1     a
  2     a
  3     a
  1     b
  2     b
  4     b

我希望得到这样的东西(ID分组在列中):

a.id    b.id
   1       1
   2       2
   3    null
null       4

这可能吗?我尝试了以下查询...

SELECT a.id, b.id FROM stuff a
FULL OUTER JOIN stuff b ON a.id = b.id
WHERE a.grp = 'a' AND b.grp = 'b';

...但我只得到公共节点:

a.id    b.id
   1       1
   2       2

我也尝试过使用JOIN ON和WHERE,但似乎无法获得理想的结果。

我在网上找到的最接近的问题是this one,但我也无法让UNION工作。

性能不是问题,我可以假设只有两个组。

有什么想法吗?

1 个答案:

答案 0 :(得分:9)

你先做错了事,然后尝试修复它。那不行。

您要加入的内容是select * from stuff where grp = 'a'select * from stuff where grp = 'b'。加入那些:

select a.ID as a, b.ID as b from
  (select * from stuff where grp = 'a') a
full join
  (select * from stuff where grp = 'b') b
on b.id = a.id

SQL Fiddle