ďťż
 
Prosze o pomoc w skonstruowaniu zapytania SQL ďťż
 
Prosze o pomoc w skonstruowaniu zapytania 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

Prosze o pomoc w skonstruowaniu zapytania SQL



Norbert - 19-07-2006 00:45
Prosze o pomoc w skonstruowaniu zapytania SQL
  Witam

jest sobie tabelka cech (w uproszczeniu)
typ cechy - kol_1,
wartosc cechy - kol_2
identyfikator wlasciciela cechy - id, np.

| id | kol_1 | kol_2|

| 1 | 'A' | '30' |
| 1 | 'B' | 'K' |
| 1 | 'C' | '185'|
| 2 | 'A' | '30' |
| 2 | 'B' | 'M' |
| 2 | 'C' | '182'|

Jak zadać zapytanie które pokaże:

wszystkie id, których cecha 'A' ma wartosc '30' i jednocześnie cecha 'B' ma
wartość 'K'.

Potrzebuję się tak zapytać w Postgresie i MSSQL'u i powiem szczerze że nie
mam koncepcji, a może to już zmęczenie.

Z góry dzięki za pomoc

Pozdrawiam

Norbert





Jacek Stawicki - 19-07-2006 00:45

 
Użytkownik "Norbert" <norbertn_at_post.pl.i.dont.like.sp_a_m> napisał w
wiadomości news:44bd13ff$1@news.home.net.pl...
> Witam
>
> jest sobie tabelka cech (w uproszczeniu)
> typ cechy - kol_1,
> wartosc cechy - kol_2
> identyfikator wlasciciela cechy - id, np.
>
> | id | kol_1 | kol_2|
>
> | 1 | 'A' | '30' |
> | 1 | 'B' | 'K' |
> | 1 | 'C' | '185'|
> | 2 | 'A' | '30' |
> | 2 | 'B' | 'M' |
> | 2 | 'C' | '182'|
>
>
> Jak zadać zapytanie które pokaże:
>
> wszystkie id, których cecha 'A' ma wartosc '30' i jednocześnie cecha 'B'
> ma wartość 'K'.

select distinct id from tab t1 inner join tab t2 on t1.id=t2.id
where
t1.kol_1='A' and t1.kol_1='30'
and
t2.kol_1='B' and t2.kol_1='K'




Norbert - 19-07-2006 00:45

 
"Jacek Stawicki" <jstawik@gazeta.pl> wrote in message
news:e9j4qg$dff$1@inews.gazeta.pl...
>> Jak zadać zapytanie które pokaże:
>>
>> wszystkie id, których cecha 'A' ma wartosc '30' i jednocześnie cecha 'B'
>> ma wartość 'K'.
>
>
> select distinct id from tab t1 inner join tab t2 on t1.id=t2.id
> where
> t1.kol_1='A' and t1.kol_1='30'
> and
> t2.kol_1='B' and t2.kol_1='K'
>

Wielkie dzięki za szybką odpowiedź !
Czy masz może pomysł jak to zapytanie przekształcić aby uniwersalnie
obslugiwalo "n" cech?
Nie chciałbym budować n-krotnego joina

Pozrawiam

Norbert




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 19-07-2006 00:45

  "Norbert" <norbertn_at_post.pl.i.dont.like.sp_a_m> wrote:
> Czy masz może pomysł jak to zapytanie przekształcić aby uniwersalnie
> obslugiwalo "n" cech?
Naprawdę nie można do archiwum zajrzeć?

http://www.depesz.com/index.php/2006...na-lista-cech/

--
Michał Kuratczyk





Norbert - 19-07-2006 00:45

 
"Michał Kuratczyk" <kura@lj.pl> wrote in message
news:e9jakg$6o6$1@mx1.internetia.pl...
> Naprawdę nie można do archiwum zajrzeć?
> http://www.depesz.com/index.php/2006...na-lista-cech/

Michał bardzo Ci dziękuję :-)

Pozwól jednak na słowo komentarza
Zanim zadam zapytanie na grupie przeszukuję google, archiwa, itp.
Nie znalazłem tej informacji, może źle szukałem, ale nie znalazłem, dlatego
pytam, a od tego chyba są grupy.

Pozdrawiam

Norbert




Norbert - 19-07-2006 00:45

 
"Norbert" <norbertn_at_post.pl.i.dont.like.sp_a_m> wrote in message
news:44bd1ada@news.home.net.pl...
>
> "Jacek Stawicki" <jstawik@gazeta.pl> wrote in message
> news:e9j4qg$dff$1@inews.gazeta.pl...
>>> Jak zadać zapytanie które pokaże:
>>>
>>> wszystkie id, których cecha 'A' ma wartosc '30' i jednocześnie cecha 'B'
>>> ma wartość 'K'.
>>
>>
>> select distinct id from tab t1 inner join tab t2 on t1.id=t2.id
>> where
>> t1.kol_1='A' and t1.kol_1='30'
>> and
>> t2.kol_1='B' and t2.kol_1='K'
>>

Jacku,

Podana przez Ciebie metoda jest dobra dla małej ilości rekordów i cech.
Gdy wygenerowałem w bazie testowo 20tys wierszy, to zapytanie dla 2 cech
zajęło >300 sekund na postgresie 8 i notebooku z PIV :-). Jak postgres cos
sobie przemielil ten czas spadl do 30 sekund. Nie probowalem jednak dla
wiekszej ilosci cech, obawiam sie ze czas odpowiedzi bylby strasznie dlugi.

Wg moich aktualnych badań najbardziej optymalną jest metoda podana przez
Depesza, a przytoczona przez Michała w poniższych postach. Najważniejsze że
wzrost liczby badanych cech prawie nie wpływa na czas przetwarzania
zapytania.

select i_id
from aaa
where
(s_typ='wiek' and s_wartosc='30') OR
(s_typ='wzrost' and s_wartosc = '178') OR
(s_typ='waga' and s_wartosc='20')

group by i_id
having count(*) = 3;

Pozdrawiam

Norbert




Jacek Stawicki - 19-07-2006 00:45

 
Użytkownik "Norbert" <norbertn_at_post.pl.i.dont.like.sp_a_m> napisał w
wiadomości news:44bd31c2$1@news.home.net.pl...

> Jacku,
>
> Podana przez Ciebie metoda jest dobra dla małej ilości rekordów i cech.

nie przecze ;) zapytanie budujemy pod konkretne zalozenie.
nie znalem calosci zalozenia :)

pozdrowienia
  • 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?= [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?= [newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • latwa-kasiora.pev.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