Re: How can I selet rows which have 2 columns values cross equal?

Поиск
Список
Период
Сортировка
От Michael Glaesemann
Тема Re: How can I selet rows which have 2 columns values cross equal?
Дата
Msg-id B0FA7B5C-3766-478E-BDFD-CADC21B2AA0B@myrealbox.com
обсуждение исходный текст
Ответ на How can I selet rows which have 2 columns values cross equal?  ("Fay Du" <fay.du@versaterm.com>)
Ответы Re: How can I selet rows which have 2 columns values cross equal?  (Michael Glaesemann <grzm@myrealbox.com>)
Список pgsql-sql
On Mar 10, 2006, at 22:24 , Fay Du wrote:

> I want to get row 1, 2,4 and 7 selected. Because their values of a  
> and b
> are cross equal. i.e., for each pair of rows,
> a.Row1 = b.Row2 and b.Ro1 = a.Row2
> a.Row4 = b.Row7 and b.Ro4 = a.Row7

You need to use subqueries:

create table test
(    id integer primary key    , a integer not null    , b integer not null
);

copy test (id, a, b) from stdin;
1    100    101
2    101    100
3    100    3
4    20    30
5    11    13
6    3    33
7    30    20
\.

select t1.id as t1_id, t2.id as t2_id
from test t1
join test t2 on (t1.a = t2.b and t1.b = t2.a);
t1_id | t2_id
-------+-------     7 |     4     4 |     7     2 |     1     1 |     2
(4 rows)

And if you don't want to have each pair listed twice, just add WHERE  
t1.a < t2.a, e.g.,

select t1.id as t1_id, t2.id as t2_id
from test t1
join test t2 on (t1.a = t2.b and t1.b = t2.a)
where t1.a < t2.a;
t1_id | t2_id
-------+-------     4 |     7     1 |     2
(2 rows)

Hope this helps!

Michael Glaesemann
grzm myrealbox com



В списке pgsql-sql по дате отправления:

Предыдущее
От: Michael Fuhr
Дата:
Сообщение: Re: Locking row
Следующее
От: Michael Glaesemann
Дата:
Сообщение: Re: How can I selet rows which have 2 columns values cross equal?