2017-05-14 1 views
0

Ich habe diese Art von TischWie Gruppe von mit zwei Spalten und viceversa

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

Wenn sein 1 würde Ich mag die verschiedenen Kombinationen erhalten, die a_id=1 oder b_id=1 wie

result 
    2 
    3 
    4 

Sein haben wie Gruppe mit zwei Spalten, aber mit denselben Werten in jedem Spaltenpaar (umgekehrt). Ist es möglich, damit umzugehen?

Antwort

1

können Sie union verwenden:

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

andere Methoden Es gibt keine. . . sagen, eine seitliche 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); 

Oder auch die Abfrage direkt:

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); 

Weil Sie Duplikate entfernen, die distinct wird die Leistung von so ziemlich jedes Verfahren zu beherrschen.

+0

was ist, wenn jede Zeile eine created_at hat und ich möchte, dass das Ergebnis von dieser created_at-Anweisung ist, wobei das Ergebnis '4,3,2' sein sollte. Sowieso? –

+0

@CarlosGarcia. . . Sie sollten neue Fragen eher als Frage denn als Kommentar stellen. –

Verwandte Themen