bugas
21.02.2017, 08:13:27
Witam,
mam pytanie, czy ktoś mógłby w miarę prosty sposób podać zapytanie dla MySQL 5.7 - połączenie tabel m01, m02, ... m12 (czyli miesiące) po kolumnie "nazwa" (tytuł kolumny jednakowy we wszystkich tabelach).
Po dogłębnej lekturze wiem, że chciałbym aby było to łączenie FULL OUTER JOIN (czyli wszystko, bez względu na to czy wartość występuje po lewej, czy po prawej).
Niestety nie udało mi znaleźć "prostej" formuły, manual wspomina o tym, ale w taki sposób, że nie jestem w stanie tego zdekodować.
Z góry dziękuję za pomoc.
Pyton_000
21.02.2017, 08:43:13
Złączyć do czego?
bugas
21.02.2017, 09:55:00
Wyświetlić

obecnie korzystam z takiego zapytania, które jest niemal ok, tylko właśnie ogranicza wyniki do wartości z m01. A w m02 i kolejnych miesiącach pojawiały się nowe wartości, które również chciałbym żeby były wyświetlone.
SELECT
*
FROM
m01
LEFT JOIN
m02
ON
m01.nazwa = m02.nazwa
LEFT JOIN
m03
ON
m03.nazwa = m02.nazwa
LEFT JOIN
m04
ON
m04.nazwa = m03.nazwa
LEFT JOIN
m05
ON
m05.nazwa = m04.nazwa
LEFT JOIN
m06
ON
m06.nazwa = m05.nazwa
LEFT JOIN
m07
ON
m07.nazwa = m06.nazwa
LEFT JOIN
m08
ON
m08.nazwa = m07.nazwa
LEFT JOIN
m09
ON
m09.nazwa = m08.nazwa
LEFT JOIN
m10
ON
m10.nazwa = m09.nazwa
LEFT JOIN
m11
ON
m11.nazwa = m10.nazwa
LEFT JOIN
m12
ON
m12.nazwa = m11.nazwa
LIMIT 0, 500
nospor
21.02.2017, 10:01:08
Alc, ta struktura bazy wyglada jakby byla mocno niedopracowana
bugas
21.02.2017, 10:11:20
Nazwijmy to bardzo tymczasowa baza, stworzona na potrzeby analizy prostych danych. Nie jest to element strony czy czegokolwiek "dynamicznego". Wrzucone, przemielone, trochę uporządkowane, przeanalizowane i drop
Pilsener
21.02.2017, 10:26:12
MYSQL nie wspiera full outer join. Moźna to jednak obejść za pomocą "UNION":
select ... left join ... UNION ALL select .. right join ...
bugas
21.02.2017, 10:43:32
Ogromne dzięki, widziałem gdzieś ten sposób z UNION, ale nie skumałem... więc jeszcze tylko doprecyzuję: najpierw wszystkie (m01 ... m12) tabele z instrukcją LEFT JOIN ... ON i następnie UNION ALL i wszystkie tabele z instrukcją RIGHT JOIN ?
EDIT:
Należy użyć samo UNION, ponieważ UNION ALL powoduje duplikację wpisów. Samo UNION usuwa zduplikowane wpisy.
Jest jeszcze problem z wpisami, które pojawiły się np. w m03, ale nie ma ich już w m04
mmmmmmm
21.02.2017, 17:59:05
Samo UNION usuwa duplikaty wszędzie. Czyli jeśli w tabeli m12 pojawią ci się dwa takie same rekordy na wyjściu, to w wyniku dostaniesz tylko jeden. Można się nieźle zdziwić.
Pyton_000
21.02.2017, 18:19:32
Jak dla mnie to z du... są te tabele...
Weź jak człowiek wpakuj wszystko w 1 tabelę dodaj kolumnę `miesiac` i tam trzymaj nr. miesiąca.
bugas
22.02.2017, 08:59:11
@mmmmmmm
jako, że "nazwa" jest unikalna to nie powinny pojawić się dwa takie same rekordy w jednej tabeli, nawet wynikowej (chyba, że źle Cię zrozumiałem)
@Pyton_000
Można by, ale później trzeba by było zrobić strone php żeby to wyświetlać tak jak potrzebuje. Albo zrobić cały skrypt wpisujący/edytujący odpowiednio dane do bazy. Kupa roboty z przewagą kupy
Pyton_000
22.02.2017, 10:39:56
@bugas twój dom twoje kredki... Tylko nie płacz potem że masz kolejne problemy.
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.