[HSQLDB] join z null w warunku

0

Witam.

Mam takie tabele:

a) zlecenia(..., firma1 INTEGER NOT NULL REFERENCES firmy(id), firma2 INTEGER REFERENCES firmy(id), firma3 INTEGER REFERENCES firmy(id), firma4 INTEGER REFERENCES firmy(id), firma5 INTEGER REFERENCES firmy(id), firma6 INTEGER REFERENCES firmy(id))

b) firmy(id INTEGER IDENTITY, ...)

Przy pobraniu jakiegos zlecenia (ze wszystkimi danymi) musze zrobic cos takiego.

SELECT * FROM zlecenia JOIN firmy AS jfirma1(id1, ...) ON zlecenia.firma1=jfirma1.id1 JOIN firmy AS jfirma2(id2, ...) ON zlecenia.firma2=jfirma2.id2 JOIN ... (i tak dalej az do 6) WHERE ...

moj problem jest nastepujacy: pola firma2,firma3 ... w tabeli zlecenia moga zawierac wartosci null i wtedy warunku JOIN'a nie spelnia zadne wiersz tabeli wynikowej. Ktos ma pomysl jak poprawic to zapytanie? A moze przebudowac jakos baze?

0

Poprawka: warunku nie spelnia zaden wiersz posiadajacy choc jednego nulla.

0

Po pierwsze taka architektura jest do d...
Po drugie jeżeli chcesz wyciągnąć z tej tabeli rekordy, które nie mają nulli w kolumnach to albo JOIN-uj jeden raz do tabeli firmy i złączenia daj w ten sposób: zlecenia z JOIN firmy f ON z.firma1 = f.id AND z.firma2 = f.id... itd.
lub zostaw tak jak jest tylko zamień JOIN na LEFT JOIN i w warunku WHERE wpisz jfirma1.id IS NOT NULL AND jfirma2.id IS NOT NULL AND... itd.

0

Po pierwsze:
zdarzylem sam to zauwazyc, ale nic lepszego nie wymyslilem. Dlatego zalozylem temat z pytaniem o pomysl na ewentualna przebudowe. Twoja uwaga niczego nie wniosla.

Po drugie:
Zrobienie jednego JOIN'a z takimi warunkami zwroci tabele z rekordami, w ktorych wszystkie pola firma1, firma2 ,... będą zawierały tą samą wartość, a nie o to chodzi.

Po trzecie:
LEFT JOIN bedzie rozwiazaniem, nie rozumiem tylko po co te warunki w WHERE. Pole firmy.id ma wlasnosc IDENTITY (z zalozenia jest NOT NULL)

0

Słyszałeś o normalizacji?

Załóż dodatkową tabelę, w sumie będziesz miał 3.

  1. Zamówienia - wywal z niej firma1, firma2 itd.
  2. Firmy - bez zmian
  3. Zamówienia_firmy - załóż w niej trzy kolumny id, id_zamowienia, id_firmy

W tej trzeciej tabeli dokonuj powiązania zamówień z firmami, dzięki temu unikniesz problemu z nullami i nie tylko tego problemu.

Przykładowe dane w tabeli 3 będą wyglądać tak

id    id_zamowienia    id_firmy
1     1                       1
2     1                       2
3     1                       3
4     2                       2
5     2                       3
6     3                       1
0

Slyszalem i normalizowalem. Akurat to zostawiłem tak jak widzisz... i właściwie to nie pamietam dlaczego.. xD Duzy projekt. Przyznaje racje i dzieki za pomoc, zaraz zmienie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1