Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Select na dwoch tabelach
Forum PHP.pl > Forum > Bazy danych > MySQL
MiChaSSs
Hej,
Mam dwie tabele, w ktorych tylko 2 kolumny sa takie same, przyklad:

tabela_nr1
  1. kolumna_a | kolumna_b | kolumna_c | kolumna_d

tabela_nr2
  1. kolumna_a | kolumna_e | kolumna_f | kolumna_d


i chcialbym za pomoca selecta uzyskac poloczone te dwie tabele na takiej zasadzie, ze dla tabeli nr 1 w miejscach gdzie wystepuja kolumny kolumna_e, kolumna_f wystepowaly wartosci NULL albo zeby w tych miejscach niczego nie bylo (pusta komorka) - podobnie dla tabeli nr 2:

  1. kolumna_a | kolumna_b | kolumna_c | kolumna_d | kolumna_e | kolumna_f |
  2. wart_z_t1 | wart_z_t1 | wart_z_t1 | wart_z_t1 | NULL | NULL |
  3. wart_z_t2 | NULL | NULL | wart_z_t2 | wart_z_t2 | wart_z_t2 |


Jest cos takiego mozliwe?
thek
Tak, jest możliwe, ale nieco zamotane, gdyż musisz większość danych podać jawnie smile.gif
Zakładając taką strukturę jaką podałeś będzie to wyglądało tak:
  1. SELECT *, NULL AS kolumna_e, NULL AS kolumna_f FROM tabela_nr1
  2. UNION
  3. SELECT kolumna_a, NULL, NULL, kolumna_d, kolumna_e, kolumna_f FROM tabela_nr2

Taka składnia jest konieczna, ponieważ dla UNION ważna jest kolejność kolumn w pierwszej tabeli, gdyż to ona jest przedstawiana w wyniku. Jeśli luki będą inaczej, będziesz musiał wszystkie kolumny jawnie rozpisać, tak jak dla tabela_nr2. Niestety tak działa UNION i trzeba to zaakceptować. Przy UNION liczba kolumn w obu tabelach musi być identyczna i nazewnictwo kolumn wynikowych jest zgodne z tabelami w tabeli pierwszej, dlatego użyłem aliasów w tabela_nr1 by były zgodne z nazewnictwem w tabela_nr2, ale głównie tylko dla wygody, bo moglem je nazwać jakkolwiek. Mogłem w tabela_nr2 pominąć sobie także nazwanie ich jakkolwiek, bo nazwy kolumn przy UNION z drugiej tabeli są ignorowane przy wyniku i ważna jest tylko kolejność. Gdybym jednak najpierw chciał wyświetlić dane z tabela_nr2 to składnia zapytania wyglądała by tak:
  1. SELECT kolumna_a, NULL AS kolumna_b, NULL AS kolumna_c, kolumna_d, kolumna_e, kolumna_f FROM tabela_nr2
  2. UNION
  3. SELECT *, NULL, NULL FROM tabela_nr1

W tym przykładzie kolumny są przemieszane z NULLami i konieczne jest jawne nazwanie ich by się nic nie porąbało Nam. W UNION niestety musimy uważać w jakiej kolejności jakie kolumny dajemy :/
MiChaSSs
Bardzo dziekuje za odpowiedz, postaram sie przetestowac to co napisales jak znajde chwile czasu, pozdr winksmiley.jpg

P.S Jak cos bede Cie jeszcze meczyl tongue.gif winksmiley.jpg

========================

Dziala, dziekuje winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.