ďťż
 
Pomysł na przejrzyste zapytanie? ďťż
 
Pomysł na przejrzyste zapytanie?
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

Pomysł na przejrzyste zapytanie?



Pawel - 10-08-2007 00:00
Pomysł na przejrzyste zapytanie?
  Witam
Proszę o pomoc (wskazówkę) jak zbudować przejrzyste zapytanie do mysqla.

tabela z danymi
id_tab id mod
1 1 50
2 1 100
3 1 70
4 2 300
5 2 100
6 3 70

jak wybrać wszystkie id dla mod=100 i mod=70, czyli jedno id (np. 1) musi mieć
przypisane obie wartości mod (50 i 100)?

Oczywiście istnieje możliwość odwoływania się przez INNER JOIN do tej samej
tabeli i zapytanie wyglądało by mniej więcej tak:

SELECT *
FROM tab2 t2
INNER JOIN tab2 t1 ON t2.id = t1.id
WHERE t1.`mod` =70
AND t2.`mod` =100

ale może ktoś ma inny pomysł na rozwiązanie tego problemu?

Pozdrawiam
Pawel

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl





Rafal Franczak - 10-08-2007 00:00

  Pawel napisał(a):
> Witam
> Proszę o pomoc (wskazówkę) jak zbudować przejrzyste zapytanie do mysqla.
>
> tabela z danymi
> id_tab id mod
> 1 1 50
> 2 1 100
> 3 1 70
> 4 2 300
> 5 2 100
> 6 3 70
>
>
> jak wybrać wszystkie id dla mod=100 i mod=70, czyli jedno id (np. 1) musi mieć
> przypisane obie wartości mod (50 i 100)?
>
> Oczywiście istnieje możliwość odwoływania się przez INNER JOIN do tej samej
> tabeli i zapytanie wyglądało by mniej więcej tak:
>
> SELECT *
> FROM tab2 t2
> INNER JOIN tab2 t1 ON t2.id = t1.id
> WHERE t1.`mod` =70
> AND t2.`mod` =100
>
> ale może ktoś ma inny pomysł na rozwiązanie tego problemu?
>
> Pozdrawiam
> Pawel
>
>

Jeżeli para (id,mod) dla mod in (100,70) nie będzie unikalna
to możesz dostać więcej niż jeden wiersz. Chyba że ci to nie przeszkadza.

Rafał




hubert depesz lubaczewski - 10-08-2007 00:00

  Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
> tabela z danymi
> id_tab id mod
> 1 1 50
> 2 1 100
> 3 1 70
> 4 2 300
> 5 2 100
> 6 3 70
> ale może ktoś ma inny pomysł na rozwiązanie tego problemu?

czy kombinacja (id,mod) jest unikatowa?
jak tak to:
select id from table where mod in (70,100) group by id having count(*) = 2;

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




puchkub@poczta.onet.pl - 10-08-2007 00:00

  > Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
> > tabela z danymi
> > id_tab id mod
> > 1 1 50
> > 2 1 100
> > 3 1 70
> > 4 2 300
> > 5 2 100
> > 6 3 70
> > ale może ktoś ma inny pomysł na rozwiązanie tego problemu?
>
> czy kombinacja (id,mod) jest unikatowa?
> jak tak to:
> select id from table where mod in (70,100) group by id having count(*) = 2;
>
> depesz

niestety nie jest unikatowa :-(
są jeszcze jakieś propozycje?

Pozdrawiam
Pawel

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl





Adamm - 10-08-2007 00:00

  Użytkownik <puchkub@poczta.onet.pl> napisał w wiadomości
news:374c.00000129.46bb66b3@newsgate.onet.pl...
>> czy kombinacja (id,mod) jest unikatowa?
>> jak tak to:
>> select id from table where mod in (70,100) group by id having count(*) =
>> 2;
>>
>> depesz
>
>
> niestety nie jest unikatowa :-(
> są jeszcze jakieś propozycje?
>

Rozwiń tylko wyżej podany pomysł

select id from (select distinct t.id , t.mod table t) where mod in (70,100)
group by id having count(*) = 2;

Pozdrawiam
Adam




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 10-08-2007 00:00

  puchkub@poczta.onet.pl wrote:
>> Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
>>> tabela z danymi
>>> id_tab id mod
>>> 1 1 50
>>> 2 1 100
>>> 3 1 70
>>> 4 2 300
>>> 5 2 100
>>> 6 3 70
>>> ale może ktoś ma inny pomysł na rozwiązanie tego problemu?
>> czy kombinacja (id,mod) jest unikatowa?
>> jak tak to:
>> select id from table where mod in (70,100) group by id having count(*) = 2;
>>
>> depesz
>
>
> niestety nie jest unikatowa :-(
> są jeszcze jakieś propozycje?

Chyba to powinno zadziałać:
count(distinct mod)

--
P.M.




Rafal Franczak - 10-08-2007 00:00

  puchkub@poczta.onet.pl napisał(a):
>> Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
> Witam
> Proszę o pomoc (wskazówkę) jak zbudować przejrzyste zapytanie do mysqla.
>
> tabela z danymi
> id_tab id mod
> 1 1 50
> 2 1 100
> 3 1 70
> 4 2 300
> 5 2 100
> 6 3 70
>
>
> jak wybrać wszystkie id dla mod=100 i mod=70, czyli jedno id (np. 1) musi mieć
> przypisane obie wartości mod (50 i 100)?
>
> Oczywiście istnieje możliwość odwoływania się przez INNER JOIN do tej samej
> tabeli i zapytanie wyglądało by mniej więcej tak:
>
> SELECT *
> FROM tab2 t2
> INNER JOIN tab2 t1 ON t2.id = t1.id
> WHERE t1.`mod` =70
> AND t2.`mod` =100
>
> ale może ktoś ma inny pomysł na rozwiązanie tego problemu?

>> czy kombinacja (id,mod) jest unikatowa?
>> jak tak to:
>> select id from table where mod in (70,100) group by id having count(*) = 2;
>>
>> depesz
>
>
> niestety nie jest unikatowa :-(
> są jeszcze jakieś propozycje?
>
> Pozdrawiam
> Pawel
>

select distinct id
from tab2 t
where t.mod = 100
and exists (select 1 from tab2 x
where x.id = t.id
and x.mod = 70)

indeks na (id,mod) i powinno być dobrze.

Rafał




hubert depesz lubaczewski - 11-08-2007 00:02

  Dnia 09.08.2007 puchkub@poczta.onet.pl <puchkub@poczta.onet.pl> napisał/a:
>> Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
>> > tabela z danymi
>> > id_tab id mod
>> > 1 1 50
>> > 2 1 100
>> > 3 1 70
>> > 4 2 300
>> > 5 2 100
>> > 6 3 70
>> > ale może ktoś ma inny pomysł na rozwiązanie tego problemu?
>>
>> czy kombinacja (id,mod) jest unikatowa?
>> jak tak to:
>> select id from table where mod in (70,100) group by id having count(*) = 2;
>>
>> depesz
>
>
> niestety nie jest unikatowa :-(
> są jeszcze jakieś propozycje?

select id from dane where mod = 70
intersect
select id from dane where mod = 100

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




puchkub@poczta.onet.pl - 11-08-2007 00:02

  > Dnia 09.08.2007 puchkub@poczta.onet.pl <puchkub@poczta.onet.pl> napisał/a:
> >> Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
> >> > tabela z danymi
> >> > id_tab id mod
> >> > 1 1 50
> >> > 2 1 100
> >> > 3 1 70
> >> > 4 2 300
> >> > 5 2 100
> >> > 6 3 70
> >> > ale może ktoś ma inny pomysł na rozwiązanie tego problemu?
> >>
> >> czy kombinacja (id,mod) jest unikatowa?
> >> jak tak to:
> >> select id from table where mod in (70,100) group by id having count(*) = 2;
> >>
> >> depesz
> >
> >
> > niestety nie jest unikatowa :-(
> > są jeszcze jakieś propozycje?
>
> select id from dane where mod = 70
> intersect
> select id from dane where mod = 100
>
> depesz
>
> --
> quicksil1er: "postgres is excellent, but like any DB it requires a
> highly paid DBA. here's my CV!" :)
> http://www.depesz.com/ - blog dla ciebie (i moje CV)

coś nie chce mi działać to intersect, być może w mysql 5.0.24 nie zostało
zaimpelementowane?

Pawel

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




hubert depesz lubaczewski - 11-08-2007 00:02

  Dnia 10.08.2007 puchkub@poczta.onet.pl <puchkub@poczta.onet.pl> napisał/a:
> coś nie chce mi działać to intersect, być może w mysql 5.0.24 nie zostało
> zaimpelementowane?

aaargh. jakbym wiedział, że chodzi o mysql'a to bym się nie wtrącał.
pisz na przyszłość o jaką bazę ci chodzi. nawet w faq jest o tym
informacja.

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




Pawel - 11-08-2007 00:02

  > puchkub@poczta.onet.pl wrote:
> >> Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
> >>> tabela z danymi
> >>> id_tab id mod
> >>> 1 1 50
> >>> 2 1 100
> >>> 3 1 70
> >>> 4 2 300
> >>> 5 2 100
> >>> 6 3 70
> >>> ale może ktoś ma inny pomysł na rozwiązanie tego problemu?
> >> czy kombinacja (id,mod) jest unikatowa?
> >> jak tak to:
> >> select id from table where mod in (70,100) group by id having count(*) = 2;
> >>
> >> depesz
> >
> >
> > niestety nie jest unikatowa :-(
> > są jeszcze jakieś propozycje?
>
> Chyba to powinno zadziałać:
> count(distinct mod)
>
> --
> P.M.

oczywiście ma Pan racje działa jak należy.
Dziękuję

Pozdrawiam
Pawel

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




puchkub@poczta.onet.pl - 11-08-2007 00:02

  > Użytkownik <puchkub@poczta.onet.pl> napisał w wiadomości
> news:374c.00000129.46bb66b3@newsgate.onet.pl...
> >> czy kombinacja (id,mod) jest unikatowa?
> >> jak tak to:
> >> select id from table where mod in (70,100) group by id having count(*) =
> >> 2;
> >>
> >> depesz
> >
> >
> > niestety nie jest unikatowa :-(
> > są jeszcze jakieś propozycje?
> >
>
> Rozwiń tylko wyżej podany pomysł
>
> select id from (select distinct t.id , t.mod table t) where mod in (70,100)
> group by id having count(*) = 2;
>
> Pozdrawiam
> Adam
>
>

działające zapytanie wygląda tak
select id from table where mod in (70,100) group by id having count(distinct
mod) = 2

dziękuje za pomoc.

Pozdrawiam
Pawel

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




Pawel - 11-08-2007 00:02

  > Dnia 10.08.2007 puchkub@poczta.onet.pl <puchkub@poczta.onet.pl> napisał/a:
> > coś nie chce mi działać to intersect, być może w mysql 5.0.24 nie zostało
> > zaimpelementowane?
>
> aaargh. jakbym wiedział, że chodzi o mysql'a to bym się nie wtrącał.
> pisz na przyszłość o jaką bazę ci chodzi. nawet w faq jest o tym
> informacja.
>
> depesz
>
> --
> quicksil1er: "postgres is excellent, but like any DB it requires a
> highly paid DBA. here's my CV!" :)
> http://www.depesz.com/ - blog dla ciebie (i moje CV)

oczywiście jest w pierwszym poście wzmianka że chodzi o mysqla, ale pomimo to
dziękuje za chęci. Dobrze wiedzieć że w postgres jest coś takiego.

a ostatecznie zapytanie wygląda tak:
SELECT id
FROM tab2
WHERE `mod`
IN ( 70, 100 )
GROUP BY id
HAVING count( DISTINCT `mod` ) =2

Pozdrawiam
Pawel

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




puchkub@poczta.onet.pl - 11-08-2007 00:02

  > puchkub@poczta.onet.pl napisał(a):
> >> Dnia 09.08.2007 Pawel <puchkubWYTNIJTO@poczta.onet.pl> napisał/a:
> > Witam
> > Proszę o pomoc (wskazówkę) jak zbudować przejrzyste zapytanie do mysqla.
> >
> > tabela z danymi
> > id_tab id mod
> > 1 1 50
> > 2 1 100
> > 3 1 70
> > 4 2 300
> > 5 2 100
> > 6 3 70
> >
> >
> > jak wybrać wszystkie id dla mod=100 i mod=70, czyli jedno id (np. 1) musi mieć
> > przypisane obie wartości mod (50 i 100)?
> >
> > Oczywiście istnieje możliwość odwoływania się przez INNER JOIN do tej samej
> > tabeli i zapytanie wyglądało by mniej więcej tak:
> >
> > SELECT *
> > FROM tab2 t2
> > INNER JOIN tab2 t1 ON t2.id = t1.id
> > WHERE t1.`mod` =70
> > AND t2.`mod` =100
> >
> > ale może ktoś ma inny pomysł na rozwiązanie tego problemu?
>
>
> >> czy kombinacja (id,mod) jest unikatowa?
> >> jak tak to:
> >> select id from table where mod in (70,100) group by id having count(*) = 2;
> >>
> >> depesz
> >
> >
> > niestety nie jest unikatowa :-(
> > są jeszcze jakieś propozycje?
> >
> > Pozdrawiam
> > Pawel
> >
>
> select distinct id
> from tab2 t
> where t.mod = 100
> and exists (select 1 from tab2 x
> where x.id = t.id
> and x.mod = 70)
>
>
> indeks na (id,mod) i powinno być dobrze.
>
> Rafał

oczywiście działa, ale ostatecznie wybrałem takie rozwiązanie może bardziej
czytelne (oczywiście to rzecz gustu)

SELECT id
FROM tab2
WHERE `mod`
IN ( 70, 100 )
GROUP BY id
HAVING count( DISTINCT `mod` ) =2

Dziękuje za pomoc.
Pozdrawiam
Pawel

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= =?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?= [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?= [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?= [MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?= mecze sie i mecze i nic - zapytanie czesciowe
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • dirtyboys.xlx.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