Zagnieżdżony SQL
Floran - 10-02-2007 00:02
Zagnieżdżony SQL
Witam !
Nie wiem, czy dobrze określiłem mój problem ale chyba właśnie o zagnieżdżenie chodzi :/ Mam taki problem, który próbowałem rozwiązać przy pomocy archiwum grupy, tutoriali znalezionych w necie ale nie protrafię sobie z tym poradzić. Jeśli ktoś może mi pomóc to będę wdzięczny. Mam taką tabelę z danymi
kod symbol 711 OP 711 WD 711 CZ 712 OD 712 OD 712 WD 712 CZ 715 OD 715 OD 715 OP 715 WD 715 CZ
Z takiej tabeli wybrać kody, które w symbolu mają WD i CZ ale nie mają OP. Kody 711 i 715 posiadają symbole WD i CZ ale jednocześnie posiadają OP więc, nie spełniają mojego warunku. W tym wypadku powinien być wybrany tylko kod 712. To jest tylko przykład - moja tabela z danymi zawiera ok.100tyś rekordów.
Baza danych to Firebird 1.5
pozdrawiam
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 10-02-2007 00:02
Floran wrote: > Witam ! > > Nie wiem, czy dobrze określiłem mój problem ale chyba właśnie o > zagnieżdżenie chodzi :/ > Mam taki problem, który próbowałem rozwiązać przy pomocy archiwum grupy, > tutoriali znalezionych w necie ale nie protrafię sobie z tym poradzić. Jeśli > ktoś może mi pomóc to będę wdzięczny. > Mam taką tabelę z danymi > > kod symbol > 711 OP > 711 WD > 711 CZ > 712 OD > 712 OD > 712 WD > 712 CZ > 715 OD > 715 OD > 715 OP > 715 WD > 715 CZ > > Z takiej tabeli wybrać kody, które w symbolu mają WD i CZ ale nie mają OP. > Kody 711 i 715 posiadają symbole WD i CZ ale jednocześnie posiadają OP więc, > nie spełniają mojego warunku. > W tym wypadku powinien być wybrany tylko kod 712. > To jest tylko przykład - moja tabela z danymi zawiera ok.100tyś rekordów.
Żaden zagnieżdżony SQL (a w zasadzie co to za cudo?).
Select kod from tab where symbol in ('WD','CZ','OP') -- to dla przyspieszenia, nie ma znaczenia -- dla wyniku. group by kod having sum(case when symbol = 'WD' then 1 end) > 0 and sum(case when symbol = 'CZ' then 1 end) > 0 and sum(case when symbol = 'OP' then 1 end) = 0
-- P.M.
Floran - 13-02-2007 00:04
> Select kod from tab > where symbol in ('WD','CZ','OP') -- to dla przyspieszenia, nie ma > znaczenia > -- dla wyniku. > group by kod > having sum(case when symbol = 'WD' then 1 end) > 0 > and sum(case when symbol = 'CZ' then 1 end) > 0 > and sum(case when symbol = 'OP' then 1 end) = 0
Niestety zwracana jest wartość null :(
kod null
Cavallino - 13-02-2007 00:04
=?iso-8859-2?Q?Re:_Zagnie=BFd=BFony_SQL?= Użytkownik "Floran" <floran@op.pl> napisał w wiadomości news:eqp2sl$24u$1@news.onet.pl... >> Select kod from tab >> where symbol in ('WD','CZ','OP') -- to dla przyspieszenia, nie ma >> znaczenia >> -- dla wyniku. >> group by kod >> having sum(case when symbol = 'WD' then 1 end) > 0 >> and sum(case when symbol = 'CZ' then 1 end) > 0 >> and sum(case when symbol = 'OP' then 1 end) = 0 > > Niestety zwracana jest wartość null :( > > kod > null
A co masz w tym polu kod?
Floran - 13-02-2007 00:04
> A co masz w tym polu kod? null
Cavallino - 13-02-2007 00:04
=?iso-8859-2?Q?Re:_Zagnie=BFd=BFony_SQL?= Użytkownik "Floran" <floran@op.pl> napisał w wiadomości news:eqp3q6$40q$1@news.onet.pl... >> A co masz w tym polu kod? > null
No to byś chciał widzieć? Masz null, widzisz null.
Jakbyś chciał widzieć coś innego niż zawartość pola kod, to musisz to coś innego w select wyświetlić (wyliczyć) zamiast wyświetlać pole kod.
Floran - 13-02-2007 00:04
> No to byś chciał widzieć? > Masz null, widzisz null. > > Jakbyś chciał widzieć coś innego niż zawartość pola kod, to musisz to coś > innego w select wyświetlić (wyliczyć) zamiast wyświetlać pole kod.
Na początku pytania podałem tabelę wraz z dannymi które się tam znajdują. Tam napisałem co powinno być widoczne po zapytaniu (jeśli to możliwe oczywiście). W tym przypadku powinna być zwrócona wartość 712, gdyż tylko rekord o wartości pola kod 712 odpowiada temu.
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-02-2007 00:04
Floran wrote: >> Select kod from tab >> where symbol in ('WD','CZ','OP') -- to dla przyspieszenia, nie ma >> znaczenia >> -- dla wyniku. >> group by kod >> having sum(case when symbol = 'WD' then 1 end) > 0 >> and sum(case when symbol = 'CZ' then 1 end) > 0 >> and sum(case when symbol = 'OP' then 1 end) = 0 > > Niestety zwracana jest wartość null :( > > kod > null
A zamień wszystkie sum na count.
-- P.M.
Floran - 14-02-2007 00:02
> A zamień wszystkie sum na count. >
Tak, teraz działa. Mam nadzieję, że na większej ilości danych będzie działać prawidłowo ;) Wielkie dzięki.
pozdrawiam
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?=
=?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.pldoc.pisz.plpdf.pisz.plczterowers.keep.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 |
|