Problem z zapytanie z podzapytaniem
Michał - 20-08-2007 00:00
Problem z zapytanie z podzapytaniem
Witam, Mam taki problem:
Jest sobie tabelka: tabela O strukturze: nazwa, polaA, poleB, Polec, poleD Nazwa podobnie jak wartości kolejnych pól nie są unikalne. Chce wyciągnąć te rekordy który dla spełniają warunki polaA=X i poleB=Y oraz poleC=Z i poleD=V Wiem, że dla żadnego rekordu nie zjedzie przypadek, że obie pary warunków będę spełnione jednocześnie( czyli poleA=X i poleB=Y oraz poleC=Z i poleD=V nigdy nie będę równe w tym samy rekordzie). Czyli jak zrobię: SELECT nazwa FROM tabela WHERE poleA=X and poleB=Y and poleC=Z and poleD=V Zwróci Null's
SELECT nazwa FROM tabela WHERE (poleA=X and poleB=Y) or ( poleC=Z and poleD=V) Również nie zwróci tego co trzeba aczkolwiek w szczególnych przypadkach może
Zostaje zapytanie z podzapytaniem SELECT nazwa FROM tabela WHERE (poleA=X and poleB=Y) AND nazwa IN ( SELECT nazwa FROM tabela WHERE poleC=Z and poleD=V )
takie zapytanie zwraca to co trzeba ale trwa wieki- przy oko 100K rekordów nie doczekałem się wykonania zadania w dwie godziny.
Jak to obejść, jak przyspieszyć, proszę poradzicie. Odpowiedzi w stylu dodaj pamięcie, zmień maszynę, zmień bazę danych nie bardzo mnie ratują i z góry z nie serdecznie dziękuję :)
Baza danych InterBase
-- Pozdrawiam Michał
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 20-08-2007 00:00
Michał wrote: > Witam, > Mam taki problem: > > Jest sobie tabelka: tabela > O strukturze: nazwa, polaA, poleB, Polec, poleD > Nazwa podobnie jak wartości kolejnych pól nie są unikalne. > Chce wyciągnąć te rekordy który dla spełniają warunki polaA=X i poleB=Y oraz > poleC=Z i poleD=V
Unikał bym używania oraz, jeśli przedstawiasz wyrażenie logiczne.
> Wiem, że dla żadnego rekordu nie zjedzie przypadek, że obie pary warunków > będę spełnione jednocześnie( czyli poleA=X i poleB=Y oraz poleC=Z i poleD=V > nigdy nie będę równe w tym samy rekordzie).
Czyli użyj OR w miejsce 'oraz'.
> Czyli jak zrobię: > SELECT nazwa FROM tabela > WHERE poleA=X and poleB=Y and poleC=Z and poleD=V > Zwróci Null's > > SELECT nazwa FROM tabela > WHERE (poleA=X and poleB=Y) or ( poleC=Z and poleD=V) > Również nie zwróci tego co trzeba aczkolwiek w szczególnych przypadkach może
No zaraz. To jak nie zwróci tego co trzeba to za rekordy ty szukasz?
> Zostaje zapytanie z podzapytaniem > SELECT nazwa FROM tabela > WHERE (poleA=X and poleB=Y) > AND nazwa IN > ( > SELECT nazwa > FROM tabela > WHERE poleC=Z and poleD=V > )
Acha.... czyli ty nie szukasz rekordów a nazw czegoś.
> takie zapytanie zwraca to co trzeba ale trwa wieki- przy oko 100K rekordów > nie doczekałem się wykonania zadania w dwie godziny.
A czytujesz tą grupę? Tak raz na tydzień pada podobne pytanie. Poszukaj postów gdzie razem są słówka kluczowe HAVING, CASE i COUNT. Jeśli pałasz bezwarunkową miłością do podzapytań, IF EXISTS też Ci pomoże.
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
zanotowane.pldoc.pisz.plpdf.pisz.pllubiatowo.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 |
|