ďťż
 
Usuwanie redundantnych par w SQL ďťż
 
Usuwanie redundantnych par w SQL
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Usuwanie redundantnych par w SQL



mh - 21-02-2007 00:05
Usuwanie redundantnych par w SQL
  Witam,
Mam pewien problem, w ktorym wyszukuję pary wierszy spełniających
pewne kryteria. W wyniku tego otrzymuje dwie kolumny z ID wierszy,
które mnie interesują, np:

id1 id2
1 2
1 3
2 1
itp.

Wiedzac, ze (1,2) spelnia kryteria, informacja o (2,1) jest dla mnie
redundantna i tylko zwieksza czas dalszych obliczen. Czy jest
mozliwosc by w miare prostym(== w miare przenosnym) SQLu uzyskac taki
efekt?

Pozdrawiam,
Milosz





Grzegorz Danowski - 21-02-2007 00:05

  "mh" <mhulboj@gmail.com> wrote in message
news:1171962340.666020.304610@v33g2000cwv.googlegr oups.com...
<cite>
Mam pewien problem, w ktorym wyszukuję pary wierszy spełniających
pewne kryteria. W wyniku tego otrzymuje dwie kolumny z ID wierszy,
które mnie interesują, np:

id1 id2
1 2
1 3
2 1
itp.

Wiedzac, ze (1,2) spelnia kryteria, informacja o (2,1) jest dla mnie
redundantna i tylko zwieksza czas dalszych obliczen. Czy jest
mozliwosc by w miare prostym(== w miare przenosnym) SQLu uzyskac taki
efekt?
</cite>

Zakładając, że nie masz duplikatów w swoich danych źródłowych (jako
duplikaty rozumiem brak występowania takich samych par, np. (1,2) i (1,2)),
to mógłbyś swój problem rozwiązać mniej więcej tak:
Select
*
From
Tabela As T
Left Join
Tabela As T2
On
T.id1 = T2.id2
Where
T2.id1 Is Null
Or
T2.id1 < T2.id2

Dodatkowy warunek T2.id1 < T2.id2 jest konieczny by spośród dwóch par o
identycznych kluczach pokazywać choć jedną - w tym przypadku taką, dla
której id1 jest mniejsze od id2.
--
Pozdrawiam
Grzegorz




Grzegorz Danowski - 21-02-2007 00:05

  "Grzegorz Danowski" <gdn__na@serwerze__poczta.onet.pl> wrote in message
news:ereeoc$rqi$1@inews.gazeta.pl...
....
> to mógłbyś swój problem rozwiązać mniej więcej tak:
> Select
> *
> From
> Tabela As T
> Left Join
> Tabela As T2
> On
> T.id1 = T2.id2
> Where
> T2.id1 Is Null
> Or
> T2.id1 < T2.id2
>
> Dodatkowy warunek T2.id1 < T2.id2 jest konieczny by spośród dwóch par o
> identycznych kluczach pokazywać choć jedną - w tym przypadku taką, dla
> której id1 jest mniejsze od id2.

Widzę, że pomieszałem nieco warunek, bo w tej chwili wybierane są rekordy
dokładnie odwrotne :-), pogódź się z tym, albo zmień warunek na: T2.id1 >
T2.id2 lub T1.id1 < T1.id2.
--
Pozdrawiam
Grzegorz




=?ISO-8859-2?Q?Adam_P=B3aszczyca?= - 21-02-2007 00:05

  On 20 Feb 2007 01:05:40 -0800, "mh" <mhulboj@gmail.com> wrote:

>id1 id2
>1 2
>1 3
>2 1
>itp.
>
>Wiedzac, ze (1,2) spelnia kryteria, informacja o (2,1) jest dla mnie
>redundantna i tylko zwieksza czas dalszych obliczen. Czy jest
>mozliwosc by w miare prostym(== w miare przenosnym) SQLu uzyskac taki
>efekt?

Znaczy chodzi Ci, żeby jeśli istnieje wiersz zawierający w dwóch
kolumnach X Y, to nie był zwracany wiersz któy zawiera Y X ?

Oczywiście, że się da.

Na przykład poprzez podzapytanie i not in.
--
___________ (R)
/_ _______ Adam 'Trzypion' Płaszczyca (+48 502) 122688
___/ /_ ___ ul. Na Szaniec 23/70, 31-560 Kraków, (012) 3783198
_______/ /_ http://trzypion.oldfield.org.pl/fotki/Ponidzie_2006/
___________/ mail: _555@irc.pl GG: 3524356
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= =?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= =?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?= [Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • autwywalczyl.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com