Обсуждение: [SQL Question] Selecting distinct rows having field value pairs on semantics

Поиск
Список
Период
Сортировка

[SQL Question] Selecting distinct rows having field value pairs on semantics

От
Allan Kamau
Дата:
Hi all,
I am looking for a way of selecting records from a
table comprising of pairing fields having unique
semantics, where the pair of values of lets say 'left'
and 'right' and another pair having values of 'right'
and 'left' is considered as duplicates as they have
the same meaning.


Below is my table structure.
create table ppi_edges_tf
(
tf_id1 char(6)not null,
tf_id2 char(6)not null,
primary key(tf_id1,tf_id2)
);

I would like to create a query on this table that will
contain only unique [tf_id1 and tf_id2] combination is
unique semantically.
for example looking at a select rows of the table
tf_id1 | tf_id2
-------+--------
T00111 | T00111
T00111 | T00112
T00111 | T01400
T00111 | T05015
T00112 | T00111

The second record (T00111 | T00112) and the fifth
record(T00112 | T00111) have the same pairing meaning
and should be considered duplicate in my case and only
one for the records (either one) should be contained
in the desired resultset of unique values.
The desired resultset could be something like this
tf_id1 | tf_id2
-------+--------
T00111 | T00111
T00111 | T00112
T00111 | T01400
T00111 | T05015


Allan.


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

Re: [SQL Question] Selecting distinct rows having field value pairs on semantics

От
Harald Fuchs
Дата:
In article <20061003075437.38014.qmail@web53507.mail.yahoo.com>,
Allan Kamau <kamauallan@yahoo.com> writes:

> Hi all,
> I am looking for a way of selecting records from a
> table comprising of pairing fields having unique
> semantics, where the pair of values of lets say 'left'
> and 'right' and another pair having values of 'right'
> and 'left' is considered as duplicates as they have
> the same meaning.

In the future, please use comp.db.postgresql.sql for questions like that.

> Below is my table structure.
> create table ppi_edges_tf
> (
> tf_id1 char(6)not null,
> tf_id2 char(6)not null,
> primary key(tf_id1,tf_id2)
> );

> I would like to create a query on this table that will
> contain only unique [tf_id1 and tf_id2] combination is
> unique semantically.
> for example looking at a select rows of the table
> tf_id1 | tf_id2
> -------+--------
> T00111 | T00111
> T00111 | T00112
> T00111 | T01400
> T00111 | T05015
> T00112 | T00111

> The second record (T00111 | T00112) and the fifth
> record(T00112 | T00111) have the same pairing meaning
> and should be considered duplicate in my case and only
> one for the records (either one) should be contained
> in the desired resultset of unique values.

You could use something like that:

  SELECT DISTINCT id1, id2
  FROM (SELECT CASE WHEN tf_id1 <= tf_id2 THEN tf_id1 ELSE tf_id2 END AS id1,
               CASE WHEN tf_id1 >= tf_id2 THEN tf_id1 ELSE tf_id2 END AS id2
        FROM ppi_edges_tf
       ) AS dummy