Обсуждение: cartesian product
Hi, I have a query regarding an SQL statement I'm trying to execute. I have the following table: sequence -------------+ AK AKCMK CMKA I execute the following statement (Cartesian product): SELECT p1.sequence as sequence1, p2.sequence as sequence2 FROM potential_pairs p1, potential_pairs p2 which gives me: sequence1 | sequence2 ----------------+--------------AK | AK AK | AKCMK AK | CMKA AKCMK | AK AKCMK | AKCMKAKCMK | CMKA CMKA | AK CMKA | AKCMK CMKA | CMKA (9 rows) I want to eliminate duplicates and by duplicate I mean a tuple such as {AK, CMKA} should be regarded as the same as {CMKA, AK}. So I would like the following result: sequence1 | sequence2 ----------------+--------------AK | AK AK | AKCMK AK | CMKA AKCMK | AKCMK AKCMK | CMKACMKA | CMKA Any help would be appreciated. - Salman
On Mon, 2007-02-19 at 10:58, Salman Tahir wrote: > Hi, > > I have a query regarding an SQL statement I'm trying to execute. I > have the following table: > > sequence > -------------+ > AK > AKCMK > CMKA > > I execute the following statement (Cartesian product): > > SELECT p1.sequence as sequence1, p2.sequence as sequence2 > FROM potential_pairs p1, potential_pairs p2 > > which gives me: > > sequence1 | sequence2 > ----------------+-------------- > AK | AK > AK | AKCMK > AK | CMKA > AKCMK | AK > AKCMK | AKCMK > AKCMK | CMKA > CMKA | AK > CMKA | AKCMK > CMKA | CMKA > (9 rows) > > I want to eliminate duplicates and by duplicate I mean a tuple such as > {AK, CMKA} should be regarded as the same as {CMKA, AK}. So I would > like the following result: > > sequence1 | sequence2 > ----------------+-------------- > AK | AK > AK | AKCMK > AK | CMKA > AKCMK | AKCMK > AKCMK | CMKA > CMKA | CMKA > SELECT p1.sequence as sequence1, p2.sequence as sequence2 FROM potential_pairs p1, join potential_pairs p2 on (p1.sequence<>p2.sequence) where sequence1 > sequence2
On Mon, 2007-02-19 at 10:58, Salman Tahir wrote: > Hi, > > I have a query regarding an SQL statement I'm trying to execute. I > have the following table: > > sequence > -------------+ > AK > AKCMK > CMKA > > I execute the following statement (Cartesian product): > > SELECT p1.sequence as sequence1, p2.sequence as sequence2 > FROM potential_pairs p1, potential_pairs p2 > > which gives me: > > sequence1 | sequence2 > ----------------+-------------- > AK | AK > AK | AKCMK > AK | CMKA > AKCMK | AK > AKCMK | AKCMK > AKCMK | CMKA > CMKA | AK > CMKA | AKCMK > CMKA | CMKA > (9 rows) > > I want to eliminate duplicates and by duplicate I mean a tuple such as > {AK, CMKA} should be regarded as the same as {CMKA, AK}. So I would > like the following result: > > sequence1 | sequence2 > ----------------+-------------- > AK | AK > AK | AKCMK > AK | CMKA > AKCMK | AKCMK > AKCMK | CMKA > CMKA | CMKA Oh wait, slightly different thing you meant. OK, you'll want something like: select p1.sequence as sequence1, p2.sequence as sequence2 from potential_pairs p1, potential_pairs p2 where p1.sequence >= p2.sequence
Hi, Salman Maybe this isn't so much elegant, but works: SELECT p1.sequence as sequence1, p2.sequence as sequence2 FROM potential_pairs p1, potential_pairs p2 WHERE p1.sequence <= p2.sequence Hope this helps Salman Tahir wrote: > Hi, > > I have a query regarding an SQL statement I'm trying to execute. I > have the following table: > > sequence > -------------+ > AK > AKCMK > CMKA > > I execute the following statement (Cartesian product): > > SELECT p1.sequence as sequence1, p2.sequence as sequence2 > FROM potential_pairs p1, potential_pairs p2 > > which gives me: > > sequence1 | sequence2 > ----------------+-------------- > AK | AK > AK | AKCMK > AK | CMKA > AKCMK | AK > AKCMK | AKCMK > AKCMK | CMKA > CMKA | AK > CMKA | AKCMK > CMKA | CMKA > (9 rows) > > I want to eliminate duplicates and by duplicate I mean a tuple such as > {AK, CMKA} should be regarded as the same as {CMKA, AK}. So I would > like the following result: > > sequence1 | sequence2 > ----------------+-------------- > AK | AK > AK | AKCMK > AK | CMKA > AKCMK | AKCMK > AKCMK | CMKA > CMKA | CMKA > > Any help would be appreciated. > > - Salman > > ---------------------------(end of broadcast)--------------------------- > TIP 9: In versions below 8.0, the planner will ignore your desire to > choose an index scan if your joining column's datatypes do not > match > > -- Luiz K. Matsumura Plan IT Tecnologia Informática Ltda.