problem z zagnieżdżonym zapytaniem sql + VFP
Andrzej - 23-03-2007 00:02
problem z zagnieżdżonym zapytaniem sql + VFP
Witam Szanownych grupowiczów . Problem jest następujący : Mam dwie tabele , jedna 100 000 tys rekordów , druga 1000 . Ta druga tabela zawiera słowa kluczowe , które eliminują rekordy z pierwszej .. Chodzi o wybranie z tej pierwszej tylko tych rekordów w których w polu "nazwa" nie występują słowa kluczowe wymienione w tabeli drugiej ( +- 1000 słów ) . Poradziłem sobie z tym problemem ( w systemie VFP ) w ten sposób że tworze w pętli sparametryzowane zapytanie i podstawiam do niego wartość z danego rekordu a z kursora uzyskanego dla każdego słowa kluczowego oddzielnie pobieram dane do tabeli wynikowej . Czy można jednak to zrobić jednym dosłownie zapytaniem ?
Póki co zrobiłem to tak :
SELECT tabela2 && mam1000 rekordow ze słowami kluczowymi
SCAN
cslowo = tabela2.slowo_kluczowe
SELECT c.* FROM tabela1 c WHERE NOT cslowo $ c.nazwa INTO CURSOR wynik_czesciowy
SCAN
INSERT INTO wynik ( id , nazwa ) VALUE (wynik.czesciowy.id , wynik_czesciowy.nazwa)
ENDSCAN
ENDSCAN
W tabeli" wynik" mam już odfiltrowane rekordy ale to deczko trwa , może da się coś pokombinować z podzapytaniem typu : SELECT id FROM tabela1 WHERE NOT tabela1.id IN ( SELECT d.id FROM tabela1 d WHERE NOT tabela2.slowo_kluczowe $ d.nazwa ) INTO CURSOR wynik_koncowy - ale to mi nie działa , próbowałem ale jednie pewne rozwiązanie jakie uzyskałem to x oddzielnych zapytań w pętli .
Pozdr. Andrzej
nobody - 11-05-2007 12:32
Użytkownik Andrzej napisał: > Witam Szanownych grupowiczów . > Problem jest następujący : > Mam dwie tabele , jedna 100 000 tys rekordów , druga 1000 . > Ta druga tabela zawiera słowa kluczowe , które eliminują rekordy z > pierwszej .. > Chodzi o wybranie z tej pierwszej tylko tych rekordów w których w polu > "nazwa" nie występują słowa kluczowe wymienione w tabeli drugiej ( +- 1000 > słów ) . > Poradziłem sobie z tym problemem ( w systemie VFP ) w ten sposób że tworze > w pętli sparametryzowane zapytanie i podstawiam do niego wartość z danego > rekordu a z kursora uzyskanego dla każdego słowa kluczowego oddzielnie > pobieram dane do tabeli wynikowej . > Czy można jednak to zrobić jednym dosłownie zapytaniem ? > > Póki co zrobiłem to tak : > > SELECT tabela2 && mam1000 rekordow ze słowami kluczowymi > > SCAN > > cslowo = tabela2.slowo_kluczowe > > SELECT c.* FROM tabela1 c WHERE NOT cslowo $ c.nazwa INTO CURSOR > wynik_czesciowy > > SCAN > > INSERT INTO wynik ( id , nazwa ) VALUE (wynik.czesciowy.id , > wynik_czesciowy.nazwa) > > ENDSCAN > > ENDSCAN > > W tabeli" wynik" mam już odfiltrowane rekordy ale to deczko trwa , może da > się coś pokombinować z podzapytaniem > typu : SELECT id FROM tabela1 WHERE NOT tabela1.id IN ( SELECT d.id FROM > tabela1 d WHERE NOT tabela2.slowo_kluczowe $ d.nazwa ) INTO CURSOR > wynik_koncowy - ale to mi nie działa , > próbowałem ale jednie pewne rozwiązanie jakie uzyskałem to x oddzielnych > zapytań w pętli .
Witam.
Na dwa zapytania to wiem:
SELECT id FROM tabela1 a LEFT JOIN tabela2 b ON .T. ; INTO CURSOR crTmp ; WHERE TRIM(b.slowo_kluczowe) $ a.nazwa
SELECT id, nazwa FROM tabela1 WHERE id NOT IN (SELECT id FROM crTmp)
Pozdrawiam Jacek Kałucki
nobody - 11-05-2007 12:32
Użytkownik nobody napisał:
> SELECT id FROM tabela1 a LEFT JOIN tabela2 b ON .T. ; > INTO CURSOR crTmp ; > WHERE TRIM(b.slowo_kluczowe) $ a.nazwa
Przepraszam.
Jeśli pole ma zawierać słowo kluczowe, to wystarczy oczywiście jedno zapytanie:
SELECT a.id, a.nazwa FROM tabela1 a LEFT JOIN tabela2 b ON .T. ; INTO CURSOR crTmp ; WHERE TRIM(b.slowo_kluczowe) $ a.nazwa
Pozdrawiam Jacek Kałucki
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.plmorebeer.opx.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 |
|