Strona 1 z 1
[SOLVED] Problem z kwerendą
: wt sie 03, 2010 1:32 pm
autor: fat_m
Witam. Mam dwie tabelę, jedna z danymi, druga jedno wierszowa do wpisywania danych do wyszukiwania. Gdy zapełniam wszystkie pola to jest ok. Ale gdy zostawię jedno pole wolne w tabeli "Szukanie", to nie wyświetla mi żadnego wyniku, a powinno, bo zastosowałem do każdego pola kryterium " or '%' ". Ktoś ma jakiś pomysł?
Kod: Zaznacz cały
SELECT "D"."Imię", "D"."Nazwisko", "D"."Data naprawy", "D"."Rodzaj naprawy", "D"."Miejsce naprawy", "D"."Jednostka kierująca 1", "D"."Jednostka kierująca 2" FROM "Dane" AS "D", "Szukanie" AS "S"
WHERE (( "D"."Imię" = "S"."Imię") OR ("D"."Imię" = '%' )) AND (( "D"."Nazwisko" = "S"."Nazwisko") OR ("D"."Nazwisko" = '%' )) AND ( "D"."Data naprawy" BETWEEN "S"."Data_od" AND "S"."Data_do" ) AND (( "D"."Rodzaj naprawy" = "S"."Rodzaj naprawy") OR ("D"."Rodzaj napraway" = '%' )) AND (( "D"."Miejsce naprawy" = "S"."Miejsce naprawy") OR ("D"."Miejsce naprawy" = '%' )) AND (( "D"."Jednostka kierująca 1" = "S"."Jednostka kierująca 1") OR ("D"."Jednostka kierująca 1" = '%' )) AND (( "D"."Jednostka kierująca 2" = "S"."Jednostka kierująca 2") OR ("D"."Jednostka kierująca 2" = '%' ))
Re: Problem z kwerendą
: wt sie 03, 2010 10:57 pm
autor: Arghil
fat_m pisze:
Kod: Zaznacz cały
SELECT "D"."Imię", "D"."Nazwisko", "D"."Data naprawy", "D"."Rodzaj naprawy", "D"."Miejsce naprawy", "D"."Jednostka kierująca 1", "D"."Jednostka kierująca 2" FROM "Dane" AS "D", "Szukanie" AS "S"
WHERE (( "D"."Imię" = "S"."Imię") OR ("D"."Imię" = '%' )) AND (( "D"."Nazwisko" = "S"."Nazwisko") OR ("D"."Nazwisko" = '%' )) AND ( "D"."Data naprawy" BETWEEN "S"."Data_od" AND "S"."Data_do" ) AND (( "D"."Rodzaj naprawy" = "S"."Rodzaj naprawy") OR ("D"."Rodzaj napraway" = '%' )) AND (( "D"."Miejsce naprawy" = "S"."Miejsce naprawy") OR ("D"."Miejsce naprawy" = '%' )) AND (( "D"."Jednostka kierująca 1" = "S"."Jednostka kierująca 1") OR ("D"."Jednostka kierująca 1" = '%' )) AND (( "D"."Jednostka kierująca 2" = "S"."Jednostka kierująca 2") OR ("D"."Jednostka kierująca 2" = '%' ))
Tam gdzie chcesz zastosować '%' powinieneś użyć słowa 'like' a nie '=', czyli:
Kod: Zaznacz cały
SELECT "D"."Imię", "D"."Nazwisko", "D"."Data naprawy", "D"."Rodzaj naprawy", "D"."Miejsce naprawy", "D"."Jednostka kierująca 1", "D"."Jednostka kierująca 2" FROM "Dane" AS "D", "Szukanie" AS "S"
WHERE (( "D"."Imię" = "S"."Imię") OR ("D"."Imię" LIKE '%' )) AND (( "D"."Nazwisko" = "S"."Nazwisko") OR ("D"."Nazwisko" LIKE '%' )) AND ( "D"."Data naprawy" BETWEEN "S"."Data_od" AND "S"."Data_do" ) AND (( "D"."Rodzaj naprawy" = "S"."Rodzaj naprawy") OR ("D"."Rodzaj napraway" LIKE '%' )) AND (( "D"."Miejsce naprawy" = "S"."Miejsce naprawy") OR ("D"."Miejsce naprawy" LIKE '%' )) AND (( "D"."Jednostka kierująca 1" = "S"."Jednostka kierująca 1") OR ("D"."Jednostka kierująca 1" LIKE '%' )) AND (( "D"."Jednostka kierująca 2" = "S"."Jednostka kierująca 2") OR ("D"."Jednostka kierująca 2" LIKE '%' ))
Re: Problem z kwerendą
: śr sie 04, 2010 11:37 am
autor: fat_m
Po zastosowaniu Twojego kodu, kwerenda szuka rekordów tylko wg daty

Re: Problem z kwerendą
: śr sie 04, 2010 5:42 pm
autor: Arghil
fat_m pisze:Po zastosowaniu Twojego kodu, kwerenda szuka rekordów tylko wg daty

Przekopiowałem tylko Twój kod i pozamieniałem
na
Jak możesz to zamieść przykładowy plik, łatwiej będzie poprawić zapytanie.
Za późna pora była ostatnio

, w sumie Twoje zapytanie sprowadza się do tego:
Kod: Zaznacz cały
SELECT "D"."Imię", "D"."Nazwisko", "D"."Data naprawy", "D"."Rodzaj naprawy", "D"."Miejsce naprawy", "D"."Jednostka kierująca 1", "D"."Jednostka kierująca 2" FROM "Dane" AS "D", "Szukanie" AS "S"
WHERE ("D"."Imię" LIKE '%' ) AND ("D"."Nazwisko" LIKE '%' ) AND ( "D"."Data naprawy" BETWEEN "S"."Data_od" AND "S"."Data_do" ) AND ("D"."Rodzaj napraway" LIKE '%' ) AND ( ("D"."Miejsce naprawy" LIKE '%' ) AND ("D"."Jednostka kierująca 1" LIKE '%' ) AND ("D"."Jednostka kierująca 2" LIKE '%' )
a o to chyba nie chodziło?
Re: Problem z kwerendą
: śr sie 04, 2010 6:46 pm
autor: Arghil
Gdyby tak zastosować trójwartościową logikę SQL - NULL dla pustych kolumn w tabeli Szukanie:
Kod: Zaznacz cały
SELECT "D"."Imię", "D"."Nazwisko", "D"."Data naprawy", "D"."Rodzaj naprawy", "D"."Miejsce naprawy", "D"."Jednostka kierująca 1", "D"."Jednostka kierująca 2" FROM "Dane" AS "D", "Szukanie" AS "S"
WHERE (( "D"."Imię" = "S"."Imię") OR "S"."Imię" IS NULL ) AND (( "D"."Nazwisko" = "S"."Nazwisko") OR "S"."Nazwisko" IS NULL ) AND ( "D"."Data naprawy" BETWEEN "S"."Data_od" AND "S"."Data_do" ) AND (( "D"."Rodzaj naprawy" = "S"."Rodzaj naprawy") OR "S"."Rodzaj napraway" IS NULL ) AND (( "D"."Miejsce naprawy" = "S"."Miejsce naprawy") OR "S"."Miejsce naprawy" IS NULL) AND (( "D"."Jednostka kierująca 1" = "S"."Jednostka kierująca 1") OR "S"."Jednostka kierująca 1" IS NULL ) AND (( "D"."Jednostka kierująca 2" = "S"."Jednostka kierująca 2") OR "S"."Jednostka kierująca 2" IS NULL )
Re: Problem z kwerendą
: śr sie 04, 2010 7:22 pm
autor: fat_m
Załączyłem bazę danych. Tylko zawsze edytuj kwerendę w widoku SQL, inaczej się to "wykrzaczy". Zresztą sam zobacz.
EDIT
Działa

Jestem Ci dozgonnie wdzięczny. Możesz podać tytuły jakiś dobrych książęk, albo inne źródło Twojej wiedzy?
Re: Problem z kwerendą
: śr sie 11, 2010 8:11 pm
autor: Arghil
fat_m pisze:
Jestem Ci dozgonnie wdzięczny. Możesz podać tytuły jakiś dobrych książek, albo inne źródło Twojej wiedzy?
W zasadzie odpowiednia będzie każda książka opisująca podstawy języka SQL. Do tego przydaje się dokumentacja wybranego silnika bazodanowego.
Bazy wbudowane OO.org korzystają z
HSQLDB (wersja 1.8.x).