![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 1 Dołączył: 16.08.2006 Skąd: szy-ły Ostrzeżenie: (0%) ![]() ![]() |
mam takie zapytanie
i nie wiem dlaczego zawsze dostaje błędne - takie same wartości na polu Priorytet i Pakiet, wsyztskie są równe pierwszemu wierszowi odpowiednio w tabeli Priorytety oraz Pakiety. gdzie mam błąd? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 58 Pomógł: 1 Dołączył: 25.12.2008 Skąd: Żory Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że błąd leży tutaj:
Wybierając rożne kolumny z różnych tabel powinieneś skorzystać z INNER JOIN (ewentualnie LEFT albo RIGHT JOIN). Schemat:
I proponuje zmienić nazwe tabel żeby nie występowały spacje - zamowienia_z, pakiety_p, priorytety_r Pozdrawiam. Ten post edytował ten_typ 1.01.2009, 15:10:05 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie przedstawiłeś struktury tabel i łączących je relacji, więc nie spodziewaj się dokładnej podpowiedzi. Na pierwszy rzut oka wydaje mi się, że brakuje nawiasów w WHERE. Nie powinno być czasem coś w stylu:
mysz0n: Przecież nazwy tych tabel nie zawierają spacji z, p, r są aliasami dla każdej z tabel |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 1 Dołączył: 16.08.2006 Skąd: szy-ły Ostrzeżenie: (0%) ![]() ![]() |
kitol ja wiem że to są aliasy - powinieneś to napisać go tego_typa:]
ten_typ są 2 opcje łączenia ze sobą tabel - albo za pomocą LEF czy RIGHT JOINa albo w taki sposób jak ja to zrobiłem - ma to jakąś swoją nazwe ale szkołę już jakiś czas temu skończyłem i używam tego a nie zastanawiam się nad nazewnictwem. kitol co do struktury - myślę ze jest to częściowo widoczne: główną tabelą jest tabela zamówienia a w niej klucz główny ID_ZAMÓWIENIA, kolumna pakiety łączy się z zamówieniami poprzez kolumne PAKIET-w zamówieniach i ID_PAKIETU w tabeli pakiety, następnie koumna PRIORYTET w zamówieniach jest jednoznaczna z kolumną ID_PRIORYTETU w tabeli priorytety. kurde nie wiem czy to jest nieco jaśniejsze - jak nie mogę jakiegos małego jotpega wrzucić zeby wyjaśnić |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cytat kitol ja wiem że to są aliasy - powinieneś to napisać go tego_typa:] Sorki. To miało być do tego_typa:) Nadal myślę że bład powoduje brak nawiasów. Wykonaj to przykładowe zapytanie:
W sensie logicznym jest równoważne warunkowi WHERE z twojego zapytania. Jak widzisz wystarczy spełnienie przynajmniej jednego warunku z LIKE aby wiersze zostały złączone, nawet wtedy gdy z.pakiet != p.id_pakietu lub z.priorytet != r.id_priorytetu. Potrzebujesz nawiasów. Dla porównania sprawdź:
kolega ten_typ ma rację lepiej jest łączyć tabele przez JOIN. Wówczas warunki złaczenia są lepiej widoczne dla każdej z tabel. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 1 Dołączył: 16.08.2006 Skąd: szy-ły Ostrzeżenie: (0%) ![]() ![]() |
miałeś rację kitol problemem była logika zapytania, tak to jest jak sie pisze zapytania częściami, najpierw chcialem tylko wyświetlac, potem dodałem inne tabele, potem wyszukiwarke - i zapomnialem/przeoczylem/niezwrocilem uwagi.
co do tworzenia aliasów lub składania poprzez JOIN - czy jest jakaś róznica w optymalizacji dla serwera bazodanowego? bo jeśli nie - to wole tą metodę której używam - jeśli tak - przesiąde się na JOINy jeszcze raz dzieki kitol |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Uczono mnie, że zapytanie w formie:
tworzy tabelę tymczasową o wielkości iloczynu kartezjańskiego (ilość wierszy tabeli1 x il. w. tabeli2 x tabela3), tak więc do tabeli tymczasowej wkładane są wszystkie możliwe kombinacje wierszy z trzech tabel. W przypadku gdy każda tabele mają po 100 wierszy, tabela tymczasowa będzie ich miała 1.000.000. Z tego zazwyczaj 99.99% jest następnie eliminowane poprzez klauzulę WHERE. W przypadku użycia JOIN do tabeli tymczasowej branę są tylko pasujące do siebie rekordy, czyli tworzona jest tabela o ilości rekordów równej 100. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 12:35 |