如何用两列分组,反之亦然

时间:2017-05-14 10:26:53

标签: sql postgresql

我有这种表

a_id | b_id
   1 |    2
   2 |    1
   2 |    1
   1 |    2
   3 |    1
   1 |    4

如果是1我希望获得a_id=1b_id=1之类的

的不同组合
result
   2
   3
   4

它与两列相似,但在每对列中使用相同的值(反之亦然)。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用union

select b_id as result from t where a_id = 1 union
select a_id from t where b_id = 1;

还有其他方法。 。 。说,横向joi:

select distinct x.result
from t, lateral
      (values (case when a_id = 1 then b_id else a_id end) x(result)
where 1 in (a_id, b_id);

甚至更直接的查询:

select distinct x(case when a_id = 1 then b_id else a_id end) as result
from t
where 1 in (a_id, b_id);

因为您要删除重复项,distinct将主导任何方法的性能。