Jak poprawnie wyświetlić dane z tabeli pośredniczącej?

0

Hej,

Mam utworzoną tabelę pośredniczącą (tabela3), gdzie mam trzy kolumny:

  • id (PK)
  • id_tabeli1 (FK)
  • id_tabeli2 (FK)

Chciałbym wyświetlić dane z tej tabeli, czyli zestawić to co kryje się pod id_tabeli1 z korespondującym id_tabeli2. Użyłem do tego zapytania:

SELECT tabela1.kolumna1, tabela1.kolumna2, tabela1.kolumna3, tabela2.kolumna1 FROM tabela1, tabela2, tabela3
WHERE tabela1.kolumna4 = tabela3.kolumna1 AND tabela2.kolumna4 = tabela3.kolumna2;

Czy da się to jakoś uprościć? Czy może tak zostać? Czy jest to prawidłowy sposób na wyświetlenie danych z tabeli pośredniczącej?

1

Nie wiem czy można to nazwać uproszczeniem, na pewno jest czytelniejsze, a także imho bardziej poprawne (choć Twoje rozwiązanie z WHERE też zadziała):

SELECT t1.kolumna1, t1.kolumna2, t1.kolumna3, t2.kolumna1 
FROM tabela1 t1
INNER JOIN tabela3 t3
     ON t1.kolumna4 = t3.kolumna1
INNER JOIN tabela2 t2
     ON t2.kolumna4 = t3.kolumna2;
0
BlackBad napisał(a):

Nie wiem czy można to nazwać uproszczeniem, na pewno jest czytelniejsze, a także imho bardziej poprawne (choć Twoje rozwiązanie z WHERE też zadziała):

SELECT t1.kolumna1, t1.kolumna2, t1.kolumna3, t2.kolumna1 
FROM tabela1 t1
INNER JOIN tabela3 t3
     ON t1.kolumna4 = t3.kolumna1
INNER JOIN tabela2 t2
     ON t2.kolumna4 = t3.kolumna2;

Hm...W sumie rzeczywiście teraz to wygląda czytelniej.

Jeszcze jedna rzecz, która teraz mi wpadła do głowy: chciałbym uniknąć dubli w tabeli pośredniczącej, czy wystarczy, że ustawię UNIQUE na parze kolumn id_tabeli1 id_tabeli2?

0

W sumie to tak.

0
BlackBad napisał(a):

W sumie to tak.

OK, a teraz gwóźdź programu. Sytuacja jest następująca:

  • do tabeli1 wprowadzam dane insertem,
  • tabela2 ma już jakieś dane, ale po wykonaniu insertu na tabeli1, kolejnym krokiem będzie skojarzenie kolumny id z tabeli2 z nowo powstałym wpisem zawierającym kolumnę id z tabeli1,
  • tabela3 (pośrednicząca) ma być uzupełniana tymi danymi (czyli id z tabeli2 i id z tabeli1) po każdej takiej operacji insert na tabeli1.

Czy jest jakiś mechanizm, który jakoś to zautomatyzuje? Czy po prostu wykonuję dwa inserty: jeden z danymi do tabeli1, później wyciągam potrzebne mi dane z obu tabel i drugim insertem wrzucam je do tabeli pośredniczącej?

0

klucz problemu tkwi w algorytmie kojarzenia tabel 1 i 2 , czyli sposób tworzenie zapisów w trzeciej tabeli łączącej
jeśli jest to stały algorytm to nie potrzeba tabeli łączącej

0
grzegorz_so napisał(a):

klucz problemu tkwi w algorytmie kojarzenia tabel 1 i 2 , czyli sposób tworzenie zapisów w trzeciej tabeli łączącej
jeśli jest to stały algorytm to nie potrzeba tabeli łączącej

Algorytm jest stały w rozumieniu, że zawsze pobiera jedno id (zawsze różne), następnie pobiera drugie id (też może być różne) i wrzuca tę parę do trzeciej tabeli w osobne kolumny. Na ten moment zrobiłem tak, jak opisałem, czyli jeden insert wprowadza dane do tabeli, następnie pobierane są dane z obu tabel (oba id) i drugi insert wprowadza je do tabeli łączącej. Nawet działa :)

0

to co napisałeś to "definicja" tabeli łączącej. Kluczem jest sam sposób wiązania w pary zapisów z tabel 1 i 2

0
Lucas83 napisał(a):

Czy jest jakiś mechanizm, który jakoś to zautomatyzuje? Czy po prostu wykonuję dwa inserty: jeden z danymi do tabeli1, później wyciągam potrzebne mi dane z obu tabel i drugim insertem wrzucam je do tabeli pośredniczącej?

W praktyce ten mechanizm nazywa się użytkownik. Wyobraź sobie tabelę KLIENCI oraz TOWARY. Tabelą łączącą są ZAMÓWIENIA. To użytkownik (niejawnie) wybiera swoje dane (klienta), wybiera jakiś towar i wstawia do zamówienia, łącząc tabelę KLIENCI i TOWARY.
To oczywiście model uproszczony, ale generalnie związki tego typu na tym polegają.

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