【问题标题】:SQL Full Outer Join on same column in same tableSQL Full Outer Join 在同一个表的同一列上
【发布时间】:2013-06-02 17:55:51
【问题描述】:

这可能更像是一个设计问题,但我希望没有太多巫术是可能的。

假设我有这样一张桌子:

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 工作。

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

有什么想法吗?

【问题讨论】:

  • 当您按照另一个问题的答案并尝试使用UNION时发生了什么?
  • 我得到的结果与您在下面 Gordon 的建议中得到的结果相似。

标签: sql oracle full-outer-join


【解决方案1】:

您首先做错了事,然后再尝试修复它。那是行不通的。

你想加入的东西是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

【讨论】:

  • 感谢您的快速回复!您的 SQL 运行良好。我不敢相信我没听懂。
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 2019-08-06
  • 2013-04-16
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2019-07-06
相关资源
最近更新 更多