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


---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
      subscribe-nomail command to [EMAIL PROTECTED] so that your
      message can get through to the mailing list cleanly

Reply via email to