Cz??? wspólna - problem z zapytaniem sql
Claude Haux - 14-12-2006 16:08
Cz??? wspólna - problem z zapytaniem sql
Struktura bazy:
Tabela Foto id_photo int (...)
Tabela Ludzie id_osoby int (...)
Tabela Foto_INF id_photo int id_osoby int
Jak mam np. zdj?cie z 5 osobami, to do Foto_INF wstawiam 5 rekortów (numer zdj?cia oraz id ka?dej osoby).
Nie potrafi? skonstruowa? zapytania, które wyci?gnie mi z bazy numery zdj?? na których s? TYLKO wskazane osoby. To znaczy, chc? np. TYLKO zdj?cia z osobami numer 12 i 13. Jak to zrobi? w jednym zapytaniu sql? Dane wej?ciowe - numery id_osoby mam.
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 14-12-2006 16:08
Claude Haux wrote: > Struktura bazy: > > Tabela Foto > id_photo int > (...) > > Tabela Ludzie > id_osoby int > (...) > > Tabela Foto_INF > id_photo int > id_osoby int > > Jak mam np. zdj?cie z 5 osobami, to do Foto_INF wstawiam 5 rekortów (numer > zdj?cia oraz id ka?dej osoby). > > Nie potrafi? skonstruowa? zapytania, które wyci?gnie mi z bazy numery zdj?? na > których s? TYLKO wskazane osoby. To znaczy, chc? np. TYLKO zdj?cia z osobami > numer 12 i 13. Jak to zrobi? w jednym zapytaniu sql? Dane wej?ciowe - numery > id_osoby mam.
By?o wiele razu. Wyszukaj posty ze s?ówkiem HAVING a wcze?niej czy pó?niej trafisz na odpowied?.
-- P.M.
A.L.E.C - 14-12-2006 16:08
Pawe? Matejski wrote:
>> Nie potrafi? skonstruowa? zapytania, które wyci?gnie mi z bazy numery zdj?? na >> których s? TYLKO wskazane osoby. To znaczy, chc? np. TYLKO zdj?cia z osobami >> numer 12 i 13. Jak to zrobi? w jednym zapytaniu sql? Dane wej?ciowe - numery >> id_osoby mam. > > By?o wiele razu. Wyszukaj posty ze s?ówkiem HAVING a wcze?niej czy pó?niej > trafisz na odpowied?.
Nie by?o mowy o grupowaniu, zapewne chodzi?o o prosty join
SELECT DISTINCT * FROM foto f JOIN foto_inf i ON (f.id_foto = i.id_foto) WHERE i.id_osoby IN (12,13)
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.alec.pl
clhx@op.pl - 14-12-2006 16:08
Nie. Ani jedna, ani druga wersja nie odpowiada na moje pytanie.
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
Herakles - 14-12-2006 16:08
oznacz? iloczyn zbiorów(ten taki znaczek podobny do "n" przez "n". znaczek nale?y oznacz? przez "e". Logiczne i oznacz? przez "i".
I tak w Rasiowej kiedy? przeczyta?em tak? m?dro??: xeAnB<=>xeAixeB
Wi?c w zapytaniu sql b?dzie ta sama logika: where x IN (elementy zbioru A) and x IN (elementy zbioru B)
oczywi?cie zamiast elementy zbioru X wstawiamy warto?ci po przecinku lub zapytanie zwracaj?ce odpowiednie dane. Uwaga te podzapytania dla du?ych baz mog? by? bardzo niewydajne i wtedy trzeba kombinowa? innymi metodami.
Herakles - 14-12-2006 16:08
Claude Haux napisa?(a): > Struktura bazy: > > Tabela Foto > id_photo int > (...) > > Tabela Ludzie > id_osoby int > (...) > > Tabela Foto_INF > id_photo int > id_osoby int > > Jak mam np. zdj?cie z 5 osobami, to do Foto_INF wstawiam 5 rekortów (numer > zdj?cia oraz id ka?dej osoby). > > Nie potrafi? skonstruowa? zapytania, które wyci?gnie mi z bazy numery zdj?? na > których s? TYLKO wskazane osoby. To znaczy, chc? np. TYLKO zdj?cia z osobami > numer 12 i 13. Jak to zrobi? w jednym zapytaniu sql? Dane wej?ciowe - numery > id_osoby mam. > > > czyli:
select foto_id from foto where foto_id in (select foto_id from foto_inf where osoba_id=12) and foto_id in (select foto_id from foto_inf where osoba_id=13)
Claude Haux - 14-12-2006 16:08
> Claude Haux napisa?(a): > > Struktura bazy: > > > > Tabela Foto > > id_photo int > > (...) > > > > Tabela Ludzie > > id_osoby int > > (...) > > > > Tabela Foto_INF > > id_photo int > > id_osoby int > > > > Jak mam np. zdj?cie z 5 osobami, to do Foto_INF wstawiam 5 rekortów (numer > > zdj?cia oraz id ka?dej osoby). > > > > Nie potrafi? skonstruowa? zapytania, które wyci?gnie mi z bazy numery zdj?? na > > których s? TYLKO wskazane osoby. To znaczy, chc? np. TYLKO zdj?cia z osobami > > numer 12 i 13. Jak to zrobi? w jednym zapytaniu sql? Dane wej?ciowe - numery > > id_osoby mam. > > > > > > > czyli: > > select > foto_id > from > foto > where > foto_id in (select foto_id from foto_inf where osoba_id=12) and > foto_id in (select foto_id from foto_inf where osoba_id=13)
No tak, ale mi chodzi o jedno uniwersalne zapytanie, które nie jest zale?ne od ilo?ci ludzi okre?lonych przez osoba_id. Czyli jak dane wej?ciowe mam w postaci: 2,4,6,11,23 to chcia?bym gdzie? do zapytania wrzuci? "in (2,4,6,11,23)". Inaczej, nie chc? dynamicznie konstruowa? zapytania poza baz?. Chc? do bazy wrzuci? list? numerków oddzielonych przecinkami i dosta? wynik.
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
Artur Muszynski - 14-12-2006 16:08
=?iso-8859-2?Q?Re:_Cz=EA=B6=E6_wsp=F3lna_-_problem_z_zapytaniem_sql?=
clhx@op.pl wrote: > Nie. Ani jedna, ani druga wersja nie odpowiada na moje pytanie.
Naprawd?? IMO odpowied? Paw?a jest dobr? wskazówk?. HAVING COUNT...
artur
hubert depesz lubaczewski - 14-12-2006 16:08
On 2006-11-30, Claude Haux <clhx@op.pl> wrote: > Tabela Foto > id_photo int > (...) > Tabela Ludzie > id_osoby int > (...) > Tabela Foto_INF > id_photo int > id_osoby int > Jak mam np. zdj?cie z 5 osobami, to do Foto_INF wstawiam 5 rekortów (numer > zdj?cia oraz id ka?dej osoby). > Nie potrafi? skonstruowa? zapytania, które wyci?gnie mi z bazy numery zdj?? na > których s? TYLKO wskazane osoby. To znaczy, chc? np. TYLKO zdj?cia z osobami > numer 12 i 13. Jak to zrobi? w jednym zapytaniu sql? Dane wej?ciowe - numery > id_osoby mam.
mam pytanie: czy w foto_inf mog? za?o?y?, ?e kombinacja (id_photo, id_osoby) jest unikalna? tzn. nie b?dziesz mia? dwa razy wpisanej tej samej osoby dla tej samej fotki? jak tak, to prosz?:
select id_photo from foto_inf where id_osoby in (12,13) group by id_photo having count(*) = 2;
depesz
-- http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz
hubert depesz lubaczewski - 14-12-2006 16:08
On 2006-11-30, A.L.E.C <alec1@poczta.onet.pl> wrote: > Nie by?o mowy o grupowaniu, zapewne chodzi?o o prosty join
ekhem - grupowanie jest du?o prostsze od takiego joina.
depesz
-- http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz
Claude Haux - 14-12-2006 16:08
> (...) > > Jak mam np. zdj?cie z 5 osobami, to do Foto_INF wstawiam 5 rekortów (numer > > zdj?cia oraz id ka?dej osoby). > > Nie potrafi? skonstruowa? zapytania, które wyci?gnie mi z bazy numery zdj?? na > > których s? TYLKO wskazane osoby. To znaczy, chc? np. TYLKO zdj?cia z osobami > > numer 12 i 13. Jak to zrobi? w jednym zapytaniu sql? Dane wej?ciowe - numery > > id_osoby mam. > > mam pytanie: > czy w foto_inf mog? za?o?y?, ?e kombinacja (id_photo, id_osoby) jest > unikalna? > tzn. nie b?dziesz mia? dwa razy wpisanej tej samej osoby dla tej samej > fotki? > jak tak, to prosz?: > > select id_photo > from foto_inf > where id_osoby in (12,13) > group by id_photo > having count(*) = 2; > > depesz
Tak?e ?le. To zapytanie wy ?wietli wszystkie zdj?cia na których s? dok?adnie 2 osoby i conajmniej jedna z wymienionych w warukinu where. Czyli wszystkie zdj?cia na których jest tylko 12 i 13 razem ale tak?e te, na krórych jest 12 z jak?? inn? osob? oraz 13 z jak?? inn? osob?. A zatem suma zbiorów, a nie iloczyn. ;(
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
hubert depesz lubaczewski - 14-12-2006 16:08
On 2006-12-01, Claude Haux <clhx@op.pl> wrote: > Tak?e ?le. To zapytanie wy ?wietli wszystkie zdj?cia na których s? dok?adnie 2 > osoby i conajmniej jedna z wymienionych w warukinu where. Czyli wszystkie > zdj?cia na których jest tylko 12 i 13 razem ale tak?e te, na krórych jest 12 z > jak?? inn? osob? oraz 13 z jak?? inn? osob?. A zatem suma zbiorów, a nie iloczyn. ;(
serio? to mo?e k... zamiast si? wym?drza? przetestuj! to ?le, tamto ?le. jestem PEWIEN, ?e zapytanie które poda?em robi dok?adnie to co chcia?e? - poka?e zdj?cia na których wyst?puje i 12 i 13 *JEDNOCZE?NIE*.
depesz
-- http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz
A.L.E.C - 14-12-2006 16:08
hubert depesz lubaczewski wrote: > On 2006-11-30, A.L.E.C <alec1@poczta.onet.pl> wrote: >> Nie by?o mowy o grupowaniu, zapewne chodzi?o o prosty join > > ekhem - grupowanie jest du?o prostsze od takiego joina.
no tak, a w dodatku pisa?o "12 i 13" a ja zrozumia?em 12 lub 13.
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.alec.pl
Claude Haux - 14-12-2006 16:08
> serio? to mo?e k... zamiast si? wym?drza? przetestuj! to ?le, tamto ?le. > jestem PEWIEN, ?e zapytanie które poda?em robi dok?adnie to co chcia?e? > - poka?e zdj?cia na których wyst?puje i 12 i 13 *JEDNOCZE?NIE*.
Przepraszam. Masz racj?. Dzia?a. To teraz, mo?esz mi wyt?umaczy? jak krowie na miedzy, dlaczego to do cholery dzia?a i dlaczego warto?ci w tej ??czonej tabeli mia?y by? unikalne? Bo faktycznie, jak si? powtórzy?o jaki? rekord, to wszystko si? psu?o.
Tak czy siak, dzi?ki.
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 14-12-2006 16:08
Claude Haux wrote: >> serio? to mo?e k... zamiast si? wym?drza? przetestuj! to ?le, tamto ?le. >> jestem PEWIEN, ?e zapytanie które poda?em robi dok?adnie to co chcia?e? >> - poka?e zdj?cia na których wyst?puje i 12 i 13 *JEDNOCZE?NIE*. > > Przepraszam. Masz racj?. Dzia?a. > To teraz, mo?esz mi wyt?umaczy? jak krowie na miedzy, dlaczego to do cholery > dzia?a i dlaczego warto?ci w tej ??czonej tabeli mia?y by? unikalne? Bo > faktycznie, jak si? powtórzy?o jaki? rekord, to wszystko si? psu?o.
Zamiast group by daj order by i wywal having i zobacz co wtedy zwróci. Mo?esz sobie doda? jeszcze id_osoby, ?eby lepiej widzie? co si? dzieje.
-- P.M.
lukasnowy - 31-01-2007 00:01
Claude Haux napisał(a): > Struktura bazy: > > Tabela Foto > id_photo int > (...) > > Tabela Ludzie > id_osoby int > (...) > > Tabela Foto_INF > id_photo int > id_osoby int > > Jak mam np. zdjęcie z 5 osobami, to do Foto_INF wstawiam 5 rekortów (numer > zdjęcia oraz id każdej osoby). > > Nie potrafię skonstruować zapytania, które wyciągnie mi z bazy numery zdjęć na > których są TYLKO wskazane osoby. To znaczy, chcę np. TYLKO zdjęcia z osobami > numer 12 i 13. Jak to zrobić w jednym zapytaniu sql? Dane wejściowe - numery > id_osoby mam. > > >
chyba o to ci dokladnie chodzilo:
select distinct id_foto from FotoINF f where id_osoby in (12,13) and (select count(*) from FotoINF where f.id_foto = id_foto) = (select count(*) from FotoINF where id_osoby in (12,13) and f.id_foto = id_foto);
lukasnowy - 31-01-2007 00:01
lukasnowy napisał(a): > Claude Haux napisał(a): >> Struktura bazy: >> >> Tabela Foto >> id_photo int >> (...) >> >> Tabela Ludzie >> id_osoby int >> (...) >> >> Tabela Foto_INF >> id_photo int >> id_osoby int >> >> Jak mam np. zdjęcie z 5 osobami, to do Foto_INF wstawiam 5 rekortów >> (numer >> zdjęcia oraz id każdej osoby). >> >> Nie potrafię skonstruować zapytania, które wyciągnie mi z bazy numery >> zdjęć na >> których są TYLKO wskazane osoby. To znaczy, chcę np. TYLKO zdjęcia z >> osobami >> numer 12 i 13. Jak to zrobić w jednym zapytaniu sql? Dane wejściowe - >> numery >> id_osoby mam. >> >> >> > > chyba o to ci dokladnie chodzilo: > > select distinct id_foto from FotoINF f where id_osoby in (12,13) and > (select count(*) from FotoINF where f.id_foto = id_foto) = (select > count(*) from FotoINF where id_osoby in (12,13) and f.id_foto = id_foto); sorki pomylka
select distinct id_foto from FotoINF f where id_osoby in (3,4) and (select count(*) from FotoINF where f.id_foto = id_foto) = 2;
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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.pldoc.pisz.plpdf.pisz.pltejsza.htw.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 |
|