kkuubbaa88
17.08.2010, 16:50:30
witam
złączam kilka tabel ze sobą po głównym id. przykładowo pole o nazwie 'id_wiersza' ma każda tabela i jest w niej numer, który identyfikuje każdy z wierszy. Podczas złączenia następuje połączenie wszystkich tabel bez względu na to czy istnieje dany wiersz czy tez nie. dlatego do części używam inner join, a do niektórych left join.
problem polega na tym, że używając polecenia left join w momencie gdy podłączam tabele, w której nie znajduje się podany wierszy o tym samym id dane mimo tego są dopisywane do wyników w formie pól z zawartością NULL. Chciałbym podpinać tylko te tabele w których znajduje się dany wiersz.
haczyk jest w tym, że podczas zapytania złączam wszystkie tabele ze sobą i chciałbym, aby wynik był bez pól z tabel, które nie posiadają danego wiersza.
jak to zrobic ? jakie polecenie trzeba zadac ? czy w ogóle jest to możliwe ?
pozdrawiam
czy ktoś może pomóc ?
sadistic_son
17.08.2010, 17:00:04
Używaj WHERE.
SELECT pierwsza.costam , druga.costam FROM pierwsza, druga WHERE pierwsza.foreignkey_druga = druga.id_wiersza
kkuubbaa88
18.08.2010, 08:00:45
czy w takim przypadku gdy braknie jakiegos wiersza z dodawanej tabeli cale zapytanie sie nie wywali ? tzn, nie wyskoczy przypadkiem blad ?
dodatkowo nie wiem czy podczas zlaczania okolo 15-20 tabel takie rozwiazanie bedzie wydajne w porownaniu do join ?
sadistic_son
18.08.2010, 08:20:34
Cytat(kkuubbaa88 @ 18.08.2010, 09:00:45 )

czy w takim przypadku gdy braknie jakiegos wiersza z dodawanej tabeli cale zapytanie sie nie wywali ? tzn, nie wyskoczy przypadkiem blad ?
Jak sprawdzisz u siebie to będziesz mieć odpowiedź...... Po prostu NIC się nie pokaże, jeśli nie będzie warunków do spełnienia zapytania.
kkuubbaa88
18.08.2010, 08:30:25
wlasnie o tym mówiłem... a to rozwiązanie nie jest dobre, ponieważ podczas złączania jest z 6 tabel, ktore zawsze maja wszystkie wiersze i reszta jest wypelniana wybiórczo, wedle upodobań użytkownika. Z racji takiej, że chcę to zrobić w jednym zapytaniu musze wszystkie podłączyć tak, aby sie wyswietlaly tylko tabele z danymi w danym wierszu, a nie NIC jak sam zauwazyles...
thek
18.08.2010, 08:36:52
A to nie możesz dać w warunku, że określone pole jednej z tabel nie może być NULL? Ja tak wycinam wiersze i działa

Masz tabele - łączysz. Któraś z nich nie ma odpowiednika - wypełnia się nullami jak sam zauważyłeś. Wybieram którąś z kolumn tej dołączanej (najlepiej ta po której łączysz, bo na pewno wtedy będzie NULL) i w WHERE określam, że nie ma być tam NULL. Tak się wycina owe niepołączone z niczym wiersze. Warunek walisz jako AND dla każdej dołączanej tabeli. JOINujesz w sumie 5 tabel? To będzie 5 razy AND kolumna ISNOTNULL

Sprawdź sam
kkuubbaa88
25.08.2010, 12:13:59
i to jest dobre rozwiazanie

co prawda warunkow bedzie ponad 15, ale chyba nie straci duzo na wydajnosci.
czy to isnotnull ma byc pod koniec zapytania w sekcji where ? jezeli tak to raczej nie dziala to poprawnie, poniewaz wtedy gdy kolumna przy podlaczeniu jest null to cale zapytanie nie zostaje wykonane... a nie tak jak chcialem nie zostanie podlaczona tabela.